Что я должен использовать для коллекции различных объектов в Matlab? - PullRequest
2 голосов
/ 10 ноября 2010

Это недопустимо в Matlab

a = [[1];[2 3]]

На языках, которые позволяют это, это называется вложенными массивами.

Я нашел способ сделать то же самое в Matlab:

 a = {[1];[2 3]}

Как это называется?Как инициализировать такую ​​переменную с фиксированным размером (скажем, 100) без необходимости писать много кода?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2010

Он называется массивом ячеек.

Вы инициализируете его с помощью команды cell

cellArray = cell(3,2); %# this makes a 3-by-2 cell array

Альтернативный способ хранения коллекций различных объектов - struct , которую вы бы инициализировали следующим образом

myStruct = struct('firstField',1,'secondField',[2 3])

Преимущество структур над ячейками заключается в том, что поля имеют имена, что упрощает работу и документирование.Ячейки могут быть очень удобны для хранения данных, если вы хотите часто манипулировать данными, потому что вы можете, например, использовать cellfun с ними.Я часто использую ячейки для хранения данных внутри функции, но использую структуры (или объекты) для передачи данных между функциями.

Кроме того, если у вас есть список чисел и вы хотите распределить их по элементаммассив ячеек, вы можете использовать num2cell, который помещает каждый элемент массива отдельно в элемент массива ячеек, или mat2cell, если вы хотите разделитьмассив неравномерно.

a = {1,[2 3]}

эквивалентно

b = mat2cell([1 2 3],[1 1],[1 2]);
2 голосов
/ 10 ноября 2010

В качестве альтернативы я могу узнать значение фигурных скобок, набрав

help paren

Какие выходы:

{} Скобки используются для формирования массивов ячеек. Они похожи на скобки [] за исключением того, что уровни вложенности сохраняются. {magic (3) 6.9 'hello'} - это массив ячеек с тремя элементами. {magic (3), 6.9, 'hello'} - это то же самое.
{'This' 'is' 'a'; 'two' 'row' 'cell'} - это массив ячеек размером 2 на 3. Точка с запятой заканчивается первым рядом. {1 {2 3} 4} - это 3 элемента массив ячеек, где элемент 2 сам является массивом ячеек.

 Braces are also used for content addressing of cell arrays.
  They act similar to parentheses in this case except that the
  contents of the cell are returned. 

 Some examples:
     X{3} is the contents of the third element of X.
     X{3}(4,5) is the (4,5) element of those contents.
     X{[1 2 3]} is a comma-separated list of the first three
     elements of X.  It is the same as X{1},X{2},X{3} and makes sense
     inside [] ,{}, or in function input or output lists (see LISTS).

 You can repeat the content addressing for nested cells so
  that X{1}{2} is the contents of the second element of the cell
  inside the first cell of X.  This also works for nested
  structures, as in X(2).field(3).name or combinations of cell arrays
  and structures, as in  Z{2}.type(3).
0 голосов
/ 10 ноября 2010

Это массив ячеек . Избегайте их, если они вам действительно не нужны, потому что с ними тяжело работать, они гораздо медленнее, а синтаксис - ужасный, непоследовательный, задира.

...