从MATLAB单元数组中矢量化提取列表

从MATLAB单元数组中矢量化提取列表,matlab,vectorization,matlab-struct,Matlab,Vectorization,Matlab Struct,我有一个双索引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 我可以将其作为一个循环,但更喜欢矢量化:

我有一个双索引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];

使用上述答案作为起点,还可以从单元阵列结构中提取向量的2d阵列。在2d AllData单元数组的每个元素中,都有一个名为DataSet的2048元素向量。以下命令将所有这些向量提取到二维阵列:

tmp = [AllData{:,1}];
len = length(tmp(1).DataSet); % Gets the length of one vector of DataSet
tmp2 = [tmp.DataSet];  % Extracts all vectors to a large 1-d array
AllDataSets = reshape(tmp2,len,[])';  % Reshapes into a 2d array of vectors

非常感谢-您的两步解决方案可以完美地从该单元阵列提取列表!很高兴我能帮忙。欢迎来到这个网站!如果问题符合您的要求,您可能希望将其标记为已接受(左上角的左勾号)