我有一个结构矩阵。我试图从该矩阵中提取相同大小的矩阵 只有一个字段作为值。
我一直试图使用struct2cell和类似功能但没有成功。 怎么办呢?
答案 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)
我有类似的问题,但我的结构数组中的字段内容是我用来标记数据的不同长度字符串,所以当我提取字段的内容时,我想要一个不同长度字符串的单元格。
使用getfield和arrayfun的代码完成了这项工作,但我认为它比它需要的更复杂。
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}