从结构矩阵中提取数据矩阵

时间:2013-01-19 18:06:32

标签: matlab matrix struct extract

我有一个结构矩阵。我试图从该矩阵中提取相同大小的矩阵 只有一个字段作为值。

我一直试图使用struct2cell和类似功能但没有成功。 怎么办呢?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你就有一个struct数组,例如这个

s(1:2,1:3) = struct('a',1,'b',2);

现在你想要一个只有字段b

的不同结构
[newS(1:2,1:3).b] = deal(s.b);

修改

如果您只需要输出(如果字段值是标量),您可以执行以下操作:

out = zeros(size(s));
out(:) = cat(1,s.b)

答案 1 :(得分:1)

我会借用乔纳斯的榜样。您可以使用[]收集特定字段。

% Create structure array
s(1:2,1:3) = struct('a',1,'b',2);

% Change values
for idx = 1:prod(size(s))
    s(idx).a = idx;
    s(idx).b = idx^2;
end

% Gather a specific field and reshape it to the size of the original matrix
A = reshape([s.a],size(s));
B = reshape([s.b],size(s));

答案 2 :(得分:0)

我有类似的问题,但我的结构数组中的字段内容是我用来标记数据的不同长度字符串,所以当我提取字段的内容时,我想要一个不同长度字符串的单元格。

使用getfieldarrayfun的代码完成了这项工作,但我认为它比它需要的更复杂。

sa = struct('name', {'ben' 'frank', 'betty', 'cybil', 'jack'}, 'value', {1 1 2 3 5})
names = arrayfun(@(x) getfield(x, 'name'), sa, 'UniformOutput', false)

有人可以建议更清洁的选择吗?映射工具箱中的extractfield似乎可以完成这项工作,但它不是基础MATLAB系统的一部分。

更新:我已经回答了我自己的嵌入式问题。

names = {sa.name}