"Вычисления, визуализация и программирование в среде 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 размножением исходного вектор-столбца вдоль горизонтального направления (вдоль строк). Совсем другим вариантом множественной индексации, по сравнению с рассмотренной техникой, является индексирование матрицей. Пусть задана матрица у которой значения всех элементов являются допустимыми индексами сформированного выше вектор-столбца 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 |
|
|