我有一个二索引 MATLAB 元胞数组 (AllData{1:12,1:400}),其中每个元素都是一个结构体。我想从此结构中提取值列表。
例如,我想做这样的事情来从此结构中获取包含 12 个值的列表
MaxList = AllData{1:12,1}.MaxVal;
出现错误
Expected one output from a curly brace or dot indexing expression, but there were 12 results
我可以将其作为循环来执行,但更喜欢矢量化:
clear MaxList
for i=1:12
MaxList(i) = AllData{i,1}.MaxVal;
end
如何对其进行矢量化?
最佳答案
如果所有结构都是标量并且具有相同的字段,那么最好避免使用元胞数组并直接使用结构数组。例如,
clear AllData
AllData(1,1).MaxVal = 10;
AllData(1,2).MaxVal = 11;
AllData(2,1).MaxVal = 12;
AllData(2,2).MaxVal = 13;
[AllData(:).OtherField] = deal('abc');
定义一个2×2的结构体数组。然后,你想要的就可以简单地完成
result = [AllData(:,1).MaxVal];
如果您确实需要标量结构元胞数组,例如
clear AllData
AllData{1,1} = struct('MaxVal', 10, 'OtherField', 'abc');
AllData{1,2} = struct('MaxVal', 11, 'OtherField', 'abc');
AllData{2,1} = struct('MaxVal', 12, 'OtherField', 'abc');
AllData{2,2} = struct('MaxVal', 13, 'OtherField', 'abc');
您可以使用以下两个步骤:
tmp = [AllData{:,1}];
result = [tmp.MaxVal];
关于matlab - 从 MATLAB 元胞数组中矢量化提取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48491873/