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

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 7. Массивы ячеек

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

7.2. Извлечение данных

Существует два способа извлечь данные из массива ячеек для передачи их либо в некоторый числовой массив, либо в новый массив ячеек:

  • доступ к содержимому ячейки, используя индексацию содержимого;
  • доступ к подмножеству ячеек, используя индексацию ячеек

Доступ к содержимому ячеек (индексация содержимого). Используя индексирование содержимого в правой части оператора присваивания можно получить доступ к некоторым или всем данным в одной ячейке. Определить переменную в левой части оператора присваивания, чтобы запомнить содержимое ячейки. Заключить индексное выражение в правой части оператора присваивания в фигурные скобки. Это будет означать, что присваивается содержимое ячеек, а не сами ячейки.

Пример.
Рассмотрим массив ячеек N размера 2х2:

              N{1, 1} = [1 2; 4 5];
              N{1, 2} = 'Name';
              N{2, 1} = 2-4i;
              N{2, 2} = 7;

              N =
                  [2x2 double] 'Name'
                  [2.0000- 4.0000i] [ 7]

Строку, находящуюся в ячейке N{1, 2} можно извлечь следующим образом:

           c = N{1, 2}
            c = Name

Для того чтобы извлечь содержимое из некоторого подмножества ячеек необходимо использовать конкатенацию индексных выражений.

Пример.
Извлечь элемент с индексами (2,2) из числового массива ячейки N{1, 1}:

          d = N{1, 1}(2, 2)
           d = 5

Доступ к подмножеству ячеек (индексация ячеек). Используя индексацию ячеек, можно переназначить любой набор ячеек другой переменной для создания нового массива ячеек. Используя двоеточие, можно получить доступ к подмножествам ячеек внутри массива ячеек.

cell 1,1
1
cell 1,2
2
cell 1,3
3
cell 2,1
4
cell 2,2
5
cell 2,3
6
cell 3,1
7
cell 3,2
8
cell 3,3
9
-----B = A(2:3, 2:3)------>
cell 1,1
5
cell 1,2
6
cell 2,1
7
cell 2,2
8

Рис. 7.5

Удаление и переопределение массива ячеек. Удаляя ячейки из масиива, можно уменьшить размерность массива, применяя единственный оператор присваивания. По аналогии с удалением обычного массива используйте индексацию вектора при удалении строки или столбца ячеек, присваивая пустую матрицу подмассиву:

                   A(j : k ) = [ ]

Таким образом, при удалении ячеек фигурные скобки вообще не применяются в операторах присваивания.

Подобно обычным массивам с помощью функции reshape можно переопределять размеры массива ячеек, причем общее количество ячеек должно оставаться неизменным; с помощью функции reshape ни удалить, ни добавить ячеек нельзя.

Пример.

           A = cell(3, 4)
            A =

[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ]

            size(A)
             ans =    3    4
            B = reshape(A, 6, 2)
             B =

[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]
[ ] [ ]

              size(B)
              ans =    6    2

Описание списков переменных. Массивы ячеек могут быть использованы для замены следующих списков переменных:

  • списков входных переменных;
  • списков выходных переменных;
  • операций вывода на экран терминала;
  • квадратных и фигурных скобок при формировании массивов.

Когда для индексирования многомерного массива ячеек используются двоеточие и фигурные скобки, то система MATLAB обрабатывает содержимое каждой ячейки как отдельную переменную.

Пример.

Допустим, существует массив ячеек T, в котором каждая ячейка содержит вектор; тогда выражение T{1:5} эквивалентно списку векторов из первых 5 ячеек массива T.

Рассмотрим следующий массив ячеек C:

                   C(1) = {[1 2 3]};
                   C(2) = {[1 0 1]};
                   C(3) = {1:10};
                   C(4) = {[9 8 7]};
                   C(5) = {3};

Используя функцию conv, найдем произведение полиномов, определяемых векторами (свертку векторов) из ячеек C(1) и C(2):

                   d = conv(C{1:2})
                   d = 1   2   4   2   3

Выведим на экран векторы из второй, третьей и четвертой ячеек

                  C{2:4}
                   ans = 1   0   1
                   ans = 1   2   3   4   5   6   7    8   9   10
                   ans = 9   8   7

Можно сформировать новый числовой массив, используя следующий оператор присваивания

                   B = [C{1}; C{2}; C{4}]
                   B =

1 2 3
1 0 1
9 8 7

Теперь используя индексацию содержимого в левой части оператора присваивания, можно создать новый массив, каждая ячейка которого представляет отдельный выход:

                  [D{1:2}] = eig(B)
                   D =
                       [3x3 double] [3x3 double]

Можно вывести на экран матрицы правых собственных векторов и собственных значений, используя ячейки D{1} и D{2}, соответственно.

                  D{1}
                   ans =

0.3088 0.7071 0.5585
0.1148 0.0000 -0.8091
0.9442 -0.7071 0.1827

                   D{2}
                   ans =

10.9161 0 0
0 -2.0000 0
0 0 -0.9161

Замечание:

Списки входов и выходов varargin и varargout позволяют использовать переменное количество входных и выходных аргументов. Эти списки являются массивами ячеек, что позволяет поддерживать разные размеры и типы данных.

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

 


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

Система Orphus

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