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

MATLAB

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

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

7.6. Функции и команды обработки массивов ячеек

CELL
Создать массив ячеек

Синтаксис:

          c = cell(n)
          c = cell(m, n)
          c = cell([m n])
          c = cell(m, n, p,...)
          c = cell([m n p ...])
          c = cell(size(A))

Описание:

Функция c = cell(n) создает массив ячеек, состоящих из пустых матриц, размера nхn. Сообщение об ошибке возникает в том случае, если n не является скаляром.

Функции c = cell(m, n) и c = cell([m, n]) создают массив ячеек, состоящих из пустых матриц, размера mхn. Аргументы m и n должны быть скалярными.

Функции c = cell(m, n, p,...) и c = cell([m n p ...]) создают многомерный массив ячеек, состоящих из пустых матриц, размера mхnхp ... . Аргументы m, n, p, ... должны быть скалярными.

Функция c = cell(size(A)) создает массив ячеек, состоящих из пустых матриц, того же размера, что и массив A.

Пример.

                A = ones(2, 2)
                A =

1 1
1 1

                c = cell(size(A))
                c =

[ ] [ ]
[ ] [ ]

Сопутствующие функции: ONES, RAND, RANDN, ZEROS.

CELLDISP
Вывести на экран содержимое массива ячеек

Синтаксис:

           celcelldisp(C)

Описание:

Команда celldisp(C) выводит на экран содержимое массива ячеек.

Пример.
Выведем на экран содержимое следующего массива ячеек размера 2х3:

           C = {[1 2] 'Tony' 3+4i; [1 2; 3 4] -5 'abc'};
            celldisp(C)
           
C{1,1} =   1   2
            C{2,1} = 

1 2
3 4

            C{1,2} =Tony
            C{2,2} =     -5
            C{1,3} = 3.0000+ 4.0000i
            C{2,3} = abc

Сопутствующие функции: CELLPLOT.

CELLPLOT
Вывести на экран графическую структуру массива ячеек

Синтаксис:

         cellplot(C)
         cellplot(C, 'legend')
         handles = cellplot(...)

Описание:

Команда cellplot(C) выводит в графическое окно содержимое массива ячеек C. Закрашенные прмоугольники соответствуют векторам и массивам, скалярные величины и короткие строки символов выводятся в виде текста.

Команда cellplot(C, 'legend') кроме графического изображения выводит описание цветов для различных типов данных.

Функция handles = cellplot(C) выводит в графическое окно содержимое массива ячеек C и возвращает вектор поддержек.

Ограничение:

Команда cellplot может выводить только графическую струтктуру для двумерных массивов ячеек.

Пример.
Выведем на экран содержимое следующего массива ячеек размера 2х3:

              c{1, 1} = '2-by-2';
               c{1, 2} = 'eigenvalues of eye(2)';
               c{2, 1} = eye(2);
               c{2, 2} = eig(eye(2));
               cellplot(c, 'legend')

ris710.jpg (8059 bytes)

Рис. 7.10

Сопутствующие функции: CELLDISP.

CELLSTR
Преобразовать массив строк в массив символьных ячеек

Синтаксис:

             C = cellstr(S)

Описание:

Функция C = cellstr(S) преобразует массив строк S в массив символьных ячеек C.

Пример.
Задан следующий массив строк S размера 3х4:

                 S = ['abc ' ;
                         'defg' ;
                         'hi ']

                 S = abc
                       defg
                        hi

Функция C = cellstr(S) возвращает массив ячеек размера 3х1:

               C = cellstr(S)
                C = 'abc'
                       'defg'
                       'hi'

Сопутствующие функции: ISCELLSTR, STRINGS.

DEAL
Установить соответствие между входами и выходами

Синтаксис:

                [Y1, Y2, Y3,...] = deal(X)
                [Y1, Y2, Y3,...] = deal(X1, X2, X3,...)

Описание:

Функция [Y1, Y2, Y3,...] = deal(X) копирует единственный вход на все выходы, реализуя следующее соответствие Y1 = X, Y2 = X, Y3 = X, … .

Функция [Y1, Y2, Y3,...] = deal(X1, X2, X3,...) устанавливает следующее соответствие между входами и выходами Y1 = X1, Y2 = X2, Y3 = X3, … .

Замечание:

Функция deal исключительно полезна при применении в следующих конструкциях при работе с массивами ячеек и массивами записей:

  • оператор [S.field] = deal(X) присваивает всем полям структуры S с именем field значение X. Если S не существует, надо использовать оператор [S(1:m).field] = deal(X);
  • оператор [X{ : }] = deal(A.field) копирует поля структуры A с именем field в массив ячеек X. Если X не существует, надо использовать оператор [X{1:m}] = deal(A.field);
  • оператор [Y1, Y2, Y3, ...] = deal(X{ : }) копирует содержимое массива ячеек X в отдельные переменные Y1, Y2, Y3, ... ;
  • оператор [Y1,Y2,Y3,...] = deal(S.field) копирует поля структуры S с именем field в отдельные переменные Y1, Y2, Y3, ... .

Пример.
Скопировать содержимое массива ячеек C размера 1х4 в 4 выходные переменные:

               C = {rand(3) ones(3, 1) eye(3) zeros(3, 1)};
              [a, b, c, d] = deal(C{ : })
               a =

0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214

               b =
                   1
                   1
                   1
               c =

1 0 0
0 1 0
0 0 1

               d =
                    0
                    0
                    0

Скопировать содержимое всех полей name структуры A размера 1х2 в отдельные переменные:

A.name = 'Pat'; A.number = 176554;
A(2).name = 'Tony'; A(2).number = 901325;

              [name1, name2] = deal(A(:).name)
              name1 = Pat
              name2 = Tony

Сопутствующие функции: VARARGIN, VARARGOUT, CELL2STRUCT, STRUCT2CELL, NUM2CELL, CAT.

ISCELL
Выявление массива ячеек

Синтаксис:

          k = iscell(C)

Описание:

Функция k = iscell(C) возвращает логическое TRUE (1), если C - массив ячеек, и логическое FALSE (0) - в противном случае.

Сопутствующие функции: функции группы IS*.

NUM2CELL
Преобразовать массив чисел в массив ячеек

Синтаксис:

               C = num2cell(A)
               C = num2cell(A, dims)

Описание:

Функция C = num2cell(A) преобразует массив A в массив ячеек, размещая каждый элемент массива A в отдельной ячейке. Размер массива ячеек будет совпадать с размерами массива A.

Функция C = num2cell(A, dims) преобразует только те элементы массива A в массив ячеек, которые заданы вторым аргументом.

Пример.
Рассмотрим некоторый массив чисел A = rand(3):

                 A = rand(3)
                 A =

0.4447 0.9218 0.4057
0.6154 0.7382 0.9355
0.7919 0.1763 0.9169

  и применим к нему следующие преобразования:

               celldisp(num2cell(A, 2))
               ans{1} = 0.4447   0.9218   0.4057
               ans{2} = 0.6154   0.7382   0.9355
               ans{3} = 0.7919   0.1763   0.9169
               celldisp(num2cell(A, [1 3]))

ans{1} = ans{2} = ans{3} =
0.4447 0.9218 0.4057
0.6154 0.7382 0.9355
0.7919 0.1763 0.9169

В последнем случае столбцы размещены по отдельным ячейкам.

Сопутствующие функции: CAT.

CELL2STRUCT
Преобразовать массив ячеек в массив записей

Синтаксис:

           lS = cell2struct(C, fields, dim)

Описание:

Функция S = cell2struct(C, fields, dim) преобразует массив ячеек C в массив записей S вдоль размерности dim, сохраняя размер массива C по этой размерности в записи структуры. Аргумент fields может быть массивом строк или массивом строковых ячеек.

Пример.
Рассмотрим массив ячеек размера 1 по первой размерности и размера 3 по второй

         c = {'tree', 37.4, 'birch'}
          c =
              'tree'    [37.4000]   'birch'

и преобразуем его по второй размерности в структуру с полями f = {'category', 'height', 'name'}:

         f = {'category', 'height', 'name'};
          s = cell2struct(c, f, 2)

          s =
            category: 'tree'
                height: 37.4000
                name: 'birch'

Сопутствующие функции: FIELDNAMES, STRUCT2CELL.

STRUCT2CELL
Преобразовать массив записей в массив ячеек

Синтаксис:

           C = struct2cell(S)

Описание:

Функция C = struct2cell(S) преобразует массив записей S размера mхn (с p полями) в массив ячеек C размера pхmхn.

Если массив записей S многомерный, то массив ячеек C имеет размер [p size(S)].

Пример.
Следующие операторы

        clear S,
        S.category = 'tree'; S.height = 37.4; S.name = 'birch';

создают структуру

        S =
          category: 'tree'
              height: 37.4000
               name: 'birch

Преобразуем эту структуру в массив ячеек

         C = struct2cell(S)
         C =
                'tree'
                [37.4000]
                'birch'

Сопутствующие функции: CELL2STRUCT, FIELDS.

LISTS
Определение списков значений

Синтаксис:

            help lists

Описание:

Команда help lists выводит на экран следующий комментарий к определению и использованию списков значений при работе с массивами записей и массивами ячеек.

Извлечение множественных данных из массивов записей и массивов ячеек осуществляется с помощью списков значений.

Список значений для массива записей - это объединение одноименных полей S.name = [S(1).name S(2).name … S(end).name].

Список значений для массива ячеек - это объединение ячеек C{:} = [C{1} C{2} … C{end}].

Конструкции вида S(m:n).name, C{m:n} также представляют собой списки значений.

Списки значений используются в следующих случаях:

  • в командной строке для вывода значений на экран - S.name, C{:};
  • при вызове М-функций - myfun(x, y, S.name), myfun(x, y, C{:});
  • в операциях конкатенации - [S.name], [C{:}];
  • в списках выходных аргументов функции - [S.name] = myfun, [C{:}] = myfun;
  • как составляющие массива ячеек - {S.name}, {C{:}}.

Пример.
Рассмотрим некоторые примеры использования списков значений:

  • формирование массива ячеек
         C = {1 2 3 4}
         C = [1]   [2]   [3]   [4]
  • преобразование массива ячеек в числовой массив
         A = [C{:}]
        
    A = 1   2   3   4
  • преобразование массива ячеек в трехмерный массив
         B = cat(3, C{:})
         B(:, :, 1) = 1
         B(:, :, 2) = 2
         B(:, :, 3) = 3
         B(:, :, 4) = 4
  • присвоение значений одному из полей массива записей
         [S(1:3).FIELD] = deal(5)
          S =
          3x1 struct array with fields:
                FIELD
          S(:).FIELD
          ans = 5
          ans = 5
          ans = 5

В результате выполненных операций были сформированы следующие массивы:

      whos

Name Size Bytes Class
A 1x4 32 double array
B 1x1x4 32 double array
C 1x4 400 cell array
S 3x1 332 struct array
Grand total is 22 elements using 796 bytes
Общее количество элементов - 22; используют 796 байтов

Сопутствующие функции: CAT, CELL2STRUCT, DEAL, NUM2CELL, STRUCT2CELL, VARARGIN, VARARGOUT.

VARARGIN
Список входных аргументов переменной длины

Синтаксис:

           z = function myfun(x, y, varargin)

Описание:

Переменная varargin позволяет объединить любое количество входных аргументов; она представляет собой массив ячеек, который содержит аргументы-опции вызываемой функции. Эта переменная должна быть последней в списке входов, а ее написание допускается только строчными буквами.

Пример.
Рассмотрим М-функцию

      function myplot(x, varargin)
            plot(x, varargin{:})

Она объединяет все входные аргументы, начиная со второго в одну переменную varargin. В свою очередь, при обращении к функции plot используется список значений varargin{:}, чтобы передать все задействованные аргументы. Например, при вызове функции myplot в форме:

         myplot(sin(0:.1:1), 'color', [.5 .7 .3], 'linestyle', ':');

переменная varargin - это массив ячеек размера 1х4, содержащий значения

        'color', [.5 .7 .3], 'linestyle', ':'.

Сопутствующие функции: VARARGOUT, NARGIN, NARGOUT, INPUTNAME, FUNCTION, LISTS.

VARARGOUT
Список выходных аргументов переменной длины

Синтаксис:

           [z, varargout] = myfun(x, y, n)

Описание:

Переменная varargout позволяет объединить любое количество выходных аргументов; она представляет собой массив ячеек, который содержит аргументы-опции выхода функции. Эта переменная должна быть последней в списке выходов, а ее написание допускается только строчными буквами.

Переменная varargout не создается при вызове функции; ее необходимо создать при формировании выходов создаваемой М-функции, используя соответствующие операторы цикла, как это показано в нижеследующем примере

Пример.
Рассмотрим М-функцию

             function [s, varargout] = mysize(x)
                   nout = max(nargout, 1)-1;
                   s = size(x);
                   for i=1:nout,
                        varargout(i) = {s(i)};
                   end

Здесь с использованием цикла объединуны все выходные аргументы, начиная со второго в одну переменную varargout.

Переменная varargout - это массив ячеек размера 1хnout, содержащий значения размерностей выходного многомерного массива. Например, при обращении вида

           [s, rows, cols, pages] = mysize(rand(4, 5, 3));

возвращаются значения

             s = [4 5 3], rows = 4, cols = 5, pages = 3.

Сопутствующие функции: VARARGIN, NARGIN, NARGOUT, FUNCTION, LISTS.

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

 


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

Система Orphus

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