1

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

我一直在尝试使用 struct2cell 和类似的功能,但没有成功。如何才能做到这一点?

4

3 回答 3

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)
于 2013-01-19T18:37:03.107 回答
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));
于 2013-01-19T18:46:52.233 回答
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}
于 2014-01-28T11:00:45.300 回答