Как получить доступ ко всем элементам поля массива структуры, вложенным в массив ячеек в MATLAB?

вот код, который создает пример массива ячеек для этого вопроса:

mycell = cell([5,1]);
for i = 1 : size(mycell)
    mystruct = struct();
    mycell{i} = mystruct;
    mycell{i}.field1 = i;
end

Я ожидал mycell{:}.field1 делать то, что я хочу, но это дает ошибку. Я могу использовать следующее для цикла:

for i = 1 : size(mycell)
    mycell{i}.field1
end

но я бы предпочел более простое или более элегантное решение, поскольку хочу использовать все элементы mycell.field1 как y-переменные в графике. Есть идеи?

1 ответов


два возможных решения:

первый:

если все структуры в массив ячеек имеют одинаковые поля, чем можно:

mycell = [ mycell{:} ]; % convert cell array to struct array
y = [ mycell(:).filed1 ]; % get the values

второй:

другой метод использует cellfun

y = cellfun( @(x) x.field1, mycell );  

предполагая, что все mycell{ii}.filed1 являются скалярами, иначе вам нужно будет добавить 'UniformOutput', false до cellfun.

Примечание: в случае, если некоторые поля пустые ([]) эти методы могут не работать ожидаемый.

одно маленькое замечание:
это не хорошая практика, чтобы использовать i и j как переменные в Matlab.