matlab - 从 MATLAB 元胞数组中矢量化提取列表

标签 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

我可以将其作为循环来执行,但更喜欢矢量化:

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/

相关文章:

matlab - 为什么 matlab 不给我 16KHz 采样频率的 8KHz 正弦波?

matlab - 三角测量 (MATLAB) 后的输出不准确

matlab - 如何动态访问结构字段?

c++ - ARM NEON : How to convert from uint8x16_t to uint8x8x2_t?

MATLAB - 直接使用矩阵的索引而不使用循环

arrays - MATLAB:从结构数组中收集

带有结构和空元胞数组的 MATLAB "bug"(或非常奇怪的行为)

image - 如何概括 JPEG 压缩中的量化矩阵?

algorithm - matlab将邻接矩阵转换为邻接表

c++ - 自动矢量化 GCC