Matlab: Получить поля структур внутри ячеек, 2D Strucutre Array - PullRequest
1 голос
/ 30 января 2012

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

mySample = struct('a', zeros(numA),'b', zeros(numB));
Data = cells(height,width);
disp(Data(1,1).a);

Сбой в нижней строке с ошибкой, такой как

"Неправильная ссылка на индексную матрицу."

Как двумерный массив структур создается в Matlab?

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Существует несколько способов создать массив структур («массив структур» или «массив структур»).Обратите внимание, что в массиве struct каждый элемент должен иметь одинаковые поля.Например, если s (1) имеет поля «a» и «b», то s (2) .. s (n) должно иметь поля «a» и «b».

% num rows
n = 10;
% num cols
m = 50;

% method 1, which will repeat a structure
s = struct('field1', 10, 'field2', 20);
sArray = repmat(s, n, m);

% method 2, which initializes each field to empty []
sArray(n,m) = struct('field1', [], 'field2', []);

YouМожно расширить это, чтобы выйти за пределы второго измерения:

sArray(n,m,p) = struct('field1', [], 'field2', []);

Вы также можете предварительно выделить массив и использовать цикл for для установки значения каждого поля.Дополнительно:

help deal
help structfun

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

c = cell(1,2);
c{1} = struct('a', 1, 'b', 2);
c{2} = struct('z', 0, 'q', 5);
1 голос
/ 30 января 2012

2D массив структур можно сделать двумя способами:

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

      x = {struct('a',1,'b',2), struct('c',3) ; struct() ; struct('aa',[5 6])};
      disp(x{1,2});
    
  2. Массивы структур - Homegenic контейнер. Это означает, что все структуры должны быть одинакового типа безопасности.

      x = struct('a',{1 2 3 ; 1 2 3},'b', {4 5 6; 7 8 9 });
      disp(x(1,2));
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...