"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

MATLAB 5.x. Вычисления, визуализация, программирование
43
Часть строк можно рассмотренным способом переставлять местами, часть строк можно дублировать, а некоторые строки исходной матрицы можно вообще не помещать в результирующую матрицу. Вот пример, позволяющий из только что полученной матрицы F размером 3x3 сформировать матрицу Е размером 4x5 (см. рис. 1.21).
•J MATLAB Command Window
Eile Edit Window
D a?1 ¦' ¦'- в '"• : S lg If ' ?
» E=F( [ 2 3 3 2 ], [ 2 1 3 2 J ] ) E =
4 6 5
7 9 8
7 9 8
4 б
4 б
7 9
7 9
5 4 б
_i;
Рисунок 1.21
Отсюда наглядно видно, что размер результата определяется количеством индексов, использованном при множественном индексировании. Это позволяет, размножая вектор-строки или вектор-столбцы, получать матрицы. Для примера получим матрицу из вектор-столбца
v = [ 1 ; 2 ];
Будем осуществлять индексацию вектор-столбца v двумя индексами, так как его можно рассматривать как матрицу, содержащую только один столбец. Естественно, второй индекс может быть только единицей. Но в соответствии с техникой множественного индексирования эту индексирующую единицу можно указать несколько раз:
А = v( :, [111]) А =
111
2 2 2
и мы получили матрицу 2x3 размножением исходного вектор-столбца вдоль горизонтального направления (вдоль строк).
Совсем другим вариантом множественной индексации, по сравнению с рассмотренной техникой, является индексирование матрицей. Пусть задана матрица
I =[ 1 1; 2 2; 2 2; 11];
у которой значения всех элементов являются допустимыми индексами сформированного выше вектор-столбца v. Тогда выражение
А = v( I );
44
Глава 1. Числовые массивы в системе MATLAB
осуществляющее технику индексирования матрицей, порождает в качестве результата матрицу, размер которой совпадает с размером индексирующей матрицы, а элементы поставляются вектором v посредством индексирования индивидуальными элементами матрицы. Отсюда понятен получающийся результат:
А =
1 1
2 2 2 2
1 1
Этот результат не изменится, если вместо вектор-столбца v применить вектор-строку [1,2], состоящую из тех же элементов.
Рассмотренная техника индексирования матрицей применяется для очень эффективного решения следующей задачи. Дана некоторая матрица А размером m х п. Нужно размножить эту матрицу в вертикальном направлении М раз и в горизонтальном направлении N раз. Вот решение этой задачи, основанное на технике множественного индексирования. Пусть, для определенности,
А = [ 1 3 8; 5 7 4 ]; М = 2; N = 3;
заданы исходная матрица 2 х 3 и число повторений в вертикальном и горизонтальном направлениях. Тогда следующие несколько выражений решают поставленную задачу (см. рис. 1.22):
vl = (1:2)'; v2 = (1:3)';
II = vl( :, ones(l,M) ); 12 = v2( :, ones(l,N) );
В = A( II, 12 );
•> MATLAB Command Window
_6[e_?dit Window Help
»B = A(I1,I2
1
5 1 5 7
3 8 7 4 3 8 4
1 5 1 5
i 8