我有一个单元格数组(假设大小为10),其中每个单元格都是具有相同字段的结构。假设它们都有一个字段名称x。
是否有一种方法可以将单元格数组中所有结构的向量x的值求得?我希望函数返回位置为1的大小为10的向量,单元格1中结构的字段x的值等等...
编辑1:
单元格阵列中的结构具有1个字段,除其他字段不同外,其他字段均相同。
答案 0 :(得分:2)
首先将结构c
的单元格数组(具有相同的字段名称,顺序相同)转换为结构数组:
c = cell2mat(c)
然后,根据字段的数据类型和大小,您也许可以使用
[c.x]
以“标准”方式提取字段x
值的向量。
您也可以跳过转换步骤,并使用cellfun(@(e)e.x, c)
一次提取。
答案 1 :(得分:1)
下面的代码创建一个结构的单元格数组,并将每个结构的字段“ x”提取到向量v。
%create a cell array of structures
s1.a = 'hello';
s1.x = 1;
s2.a = 'world';
s2.x = 2;
c{1} = s1;
c{2} = s2;
v = zeros(1,2);
%extract to vector
for idx=1:size(c,2)
v(1,idx) = c{idx}.x;
end
答案 2 :(得分:0)
假设您有
c = {s1, s2, s3, ...., sn};
其中公共字段为“ field_1”,那么您有两个选择
使用cell2mat。
cc = cell2mat(c); % which converts your cell array of structs into an array of structs
value = [cc.field_1]; % if values are number
或
value = {cc.field_1}; % if values are characters, for example
另一种选择是使用cellfun。
如果字段值为字符,则应将“ UniformOutput”设置为“ false”
value = cellfun(@(x) x.field_1, c, 'UniformOutput', false)
第一种选择更好。另外,请尽量避免使用cell / cellfun / arrayfun,向量会更快,甚至普通的for循环都更有效