MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 3. Программирование в среде Matlab 5

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

3.5. Индексы и подындексы

Индексы. Элемент массива А, расположенный на пересечении строки i и столбца j, обозначается как А(i, j).

Пример
Рассмотрим в качестве массива А матрицу magic(4):

           А = magic(4)
           А =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

Тогда А(4, 3) - это элемент, расположенный на пересечении строки 4 и столбца 3, равный 15.

Можно также вычислить сумму элементов четвертого столбца

         A(1, 4) + A(2, 4) + A(3, 4) + A(4, 4)
         ans =        34

На элементы массива А можно ссылаться, используя единственный индекс, А(k). Это обычный способ ссылки на элементы векторов. Но точно так же можно ссылаться на элементы двумерного массива, и в этом случае этот массив рассматривается как один длинный вектор-столбец, сформированный из столбцов исходного массива. В рассматриваемом примере А(12) - это другой способ ссылки на значение 15, соответствующее элементу А(4, 3).

Если будет сделана попытка обратиться к элементу вне матрицы, то программа выдаст ошибку:

          t = A(4, 5)
          ??? Index exceeds matrix dimensions. Индекс превышает размерность матрицы.

Если же выполняется присвоение значения элементу с индексами, выходящими за пределы массива, то система MATLAB автоматически увеличивает размер матрицы.

Пример:

          X = A;
          X (4, 5) = 17

          X =

16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17

Выделение подблоков массива. Если в индексных выражениях использовать двоеточие, то можно ссылаться на подблоки массива. Так индексное выражение A(1:k, j) ссылается на блок из k элементов столбца j.

Пример:

        A(1:4,3)
        ans =

3
10
6
15

Здесь выделен столбец 3 матрицы magic(4).

Оператор

         sum(A(1:4, 3))
         ans =         34

вычисляет сумму элементов столбца 3.

Однако существует способ лучше. Поскольку двоеточие само по себе ссылается на все элементы строки или столбца, то последнюю сумму можно вычислить так

          sum(A(:,3))
          ans =     34

Кроме того, начиная с версии 5.0, на последнюю строку или столбец массива можно ссылаться с помощью ключевого слова end. Таким образом, оператор

          sum(A(:, end))
          ans =          34

вычисляет сумму элементов в последнего столбца матрицы A.

Объдинение подблоков в массив. Операция объединения отдельных подблоков в массив называется конкатенацией. Даже при формировании исходной матрицу, когда объдиняются отдельные элементы, осуществляется операция конкатенации.Оператор конкатенации - это пара квадратных скобок [ ], внутри которых указываются отдельные элементы или блоки массива.

Пример.
Используя матрицу A, равную magic(4), образуем новую матрицу B размера 8x8

           B = [A A+32; A+48 A+16]
           B =

16 2 3 13 48 34 35 45
5 11 10 8 37 43 42 40
9 7 6 12 41 39 38 44
4 14 15 1 36 46 47 33
64 50 51 61 32 18 19 29
53 59 58 56 21 27 26 24
57 55 54 60 25 23 22 28
52 62 63 49 20 30 31 17

Эта матрица состоит из четырех блоков размера 4x4

B =

16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
48 35 34 45
37 42 43 40
41 38 39 44
36 47 46 33
64 51 50 61
53 58 59 56
57 54 55 60
52 63 62 49
32 19 18 28
21 26 23 28
25 22 23 28
20 31 30 17

Эта матрица есть половина другого волшебного квадрата, элементы которого находятся в диапазоне целых чисел 1:64. Суммы по столбцам уже имеют правильное значение для волшебного квадрата размера 8х8:

             sum(B)
             ans = 260   260  260  260  260  260  260  260

Однако сумма строк

             sum (B')
             ans = 196   196  196  196  324  324  324  324

совсем не та.

Попробуйте найти те перестановки элементов, которые приводят матрицу B к истинному волшебному квадрату порядка 8.

Удаление строк и столбцов. Используя понятие пустого массива, можно легко удалять строки, столбцы и целые подблоки.

Допустим,

               X = A
               X =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

Чтобы удалить второй столбец массива X достаточно применить оператор

              X (:, 2) = [ ]
              X =

16 3 13
5 10 8
9 6 12
4 15 1

При попытке улалить отдельный элемент массива возникает ошибка, поскольку результат не является массивом:

             X (1, 2) = []
             ??? Indexed empty matrix assignment is not allowed.
                   Запрещено присвоение пустой матрицы индексному выражению
.

Однако использование единственного индекса позволяет удалить одиночный элемент или последовательность элементов, при этом остающиеся элементы преобразуются в вектор-строку.

Пример:

           X = A;
           X(:, 2) = [ ]

           X =

16 3 13
5 10 8
9 6 12
4 15 1

           X(2:1:12) = [ ]
           X =       16
или
           X = A;
           X(:, 2) = [ ]

           X =

16 3 13
5 10 8
9 6 12
4 15 1

         X(2 : 2 : 10) = [ ]
         X = 16   9   3    6   13   12   1

Индексация многомерных массивов. В системе MATLAB принято хранить каждый массив, независимо от его размерности, как вектор-столбец. Этот вектор образован объединением (конкатенацией) столбцов исходного массива.

Пример.
   Система MATLAB хранит массив A

               A = [2 6 9; 4 2 8; 3 0 1]

в виде следующего вектора-столбца

2
4
3
6
2
0
9
8
1

При обращении к массиву А с указанием единственного индекса происходит непосредственное обращение к этому вектору-столбцу. Обращение A(3) ссылается на третье значение в столбце; А(7) - на седьмое и так далее.

Если количество индексов массива больше 1, то MATLAB вычисляет индекс в столбце хранения, используя значения размерностей массива. Если двумерный массив А имеет размер [d1 d2], где d1 - число строк, а d2 - число столбцов, то для элемента с номером (i, j) его позиция в векторе хранения определяется как (j-1)*d1+i.

Пример

Для элемента A(3, 2) MATLAB вычисляет следующую позицию в векторе хранения (2-1)*3+3 = 6. Элементу с номером 6 соответствует значение 0.
Этот способ хранения и индексная схема распространяются и на многомерные массивы. В этом случае MATLAB использует схему постраничного объединения, чтобы создать столбец хранения.
Использование единственного индекса приводит к непосредственному обращению к вектору хранения.
Если задано два индекса (i, j), то MATLAB вычисляет позицию описанным выше способом, причем только для первой страницы многомерного массива и при условии, что эти индексы находятся внутри диапазона размерностей исходного массива.
Если задано более двух индексов, схему индексации усложняется. Если задано четыре индекса (i, j, k, l) для четырехмерного массиву размера d1xd2xd3xd4, то позиция элемента в векторе хранения вычисляется следующим образом
                 s = (l-1)(d3)(d2)(d1)+(k-1)(d2)(d1)+(j-1)(d1)+i.
Общая формула для позиции элемента в векторе хранения, соответствующего элементу (j1 j2 ... jn-1 jn) n-мерного массива размера d1xd2xd3x ... xdn, имеет вид
                 s = (jn-1)(dn-1)(dn-2)...(d1)+(jn-1-1)(dn-2)...(d1)+...+(j2-1)(d1)+j1.

Пример

Рассмотрим многомерный массив C размера 5х4х3х2. На рис. 3.2 показаны форматы вывода на экран и хранения.

Вывод на экран Способ хранения
page(1,1) =
1

2

5

0

3

4 3 5
1 7 8
6 3 2
1 5 9
2 7 5

page(2,1) =

6 2
4

4

1

4

2

2
7 1 9
0 0 5
9 4 2
1 8 5

page(3,1) =

2

2

5

0

9

2 8 3
5 1 8
1 5 2
9 0 9
4 5 3

page(2,2) =

2 2 8 3
2 5 1 8
5 1 5 2
0 9 0 9
9 4 5 3

page(2,2) =

2 2 8 3
2 5 1 8
5 1 5 2
0 9 0 9
9 4 5 3

page(3,2) =

2 2 8 3
2 5 1 8
5 1 5 2
0 9 0 9
9 4 5 3
1
2
5
0
3

4
1
6
1
2
3
7
3
5
7
5
9
2
9
5
6
7
0
9
1
2
1
0
4
8

4
4
1
4
2

2
9
5
2
5
2
2
5
0
9

2
5
1
9
4

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика