从MATLAB单元数组中矢量化提取列表
我有一个双索引MATLAB单元数组(AllData{1:12,1:400}),其中每个元素都是一个结构。我想从这个结构中提取一个值列表 例如,我想这样做,从这个结构中获得12个值的列表从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 我可以将其作为一个循环,但更喜欢矢量化:
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
非常感谢-您的两步解决方案可以完美地从该单元阵列提取列表!很高兴我能帮忙。欢迎来到这个网站!如果问题符合您的要求,您可能希望将其标记为已接受(左上角的左勾号)