У меня есть 5 структур Matlab. Я хотел бы повторить их. Мое текущее решение заключается в следующее:Matlab: перебирать несколько структур
all_structs = [struct1,struct2,struct3,struct4,struct5];
for single_struct = all_structs
% do stuff to each struct here
end
Однако каждый из структур выше, имеет матрицу с большим количеством данных (в том числе некоторых других свойств). Кроме того, что бы я ни изменил в single_struct
, не возвращается обратно к оригиналу struct
.
Вопрос: Как это исправить? Повторяет ли Matlab все эти данные, когда я создаю вектор all_structs
? Или данные из каждой из структур (struct1,...,struct5
) переданы по ссылке? Есть ли лучший способ перебора нескольких структур?
Спасибо за помощь!
Это звучит, как если исходная проблема в том, что структура не является массив структуры , Спонтанно я бы рекомендовал вам исправить исходную проблему. Я знаю, что иногда это может быть сложно, но в противном случае вы должны жить с этими накладными расходами, я считаю. Если вы это сделаете, то временная задержка не будет такой плохой. В ответах есть решение с 'eval', но я бы не рекомендовал его. Вы также можете сделать это пошагово, если память не удалась. – patrik
@patrik Эй, это очень полезное предложение. Поэтому вместо создания группы структур я должен создать массив struct, который похож на структуру, содержащую структуры. Это оно? –
Вот как это делается. Стоит отметить, что все структуры будут иметь одинаковые поля, а матрицы в этих полях будут иметь одинаковый размер. К элементу структуры можно обращаться точно как к массиву, 'numel (s (1) .a) == N; numel (s (2) .a) == N'. В случае, если матрицы имеют разные размеры, вместо этого вы должны использовать массив 'cell'. К ним обращаются с помощью оператора '{}', 'numel (c {1}) == N; numel (c {2} ~ = N) '. – patrik