从matlab中的结构元胞数组中提取字段

Extracting field from cell array of structure in matlab

我有一个元胞数组(假设大小为 10),其中每个元胞都是具有相同字段的结构。假设它们都有一个字段名称 x.

有没有办法在向量中检索元胞数组中所有结构的字段 x 的值?我希望该函数 return 大小为 10 的向量,位置为 1,单元格 1 中结构的字段 x 的值等...

编辑 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

首先将您的结构元胞数组 c(具有相同顺序的相同字段名称)转换为结构数组:

c = cell2mat(c)

然后,根据字段元素的数据类型和大小,您也许可以使用

[c.x]

以 "standard" 方式提取场矢量 x 值。

也可以跳过转换步骤,使用cellfun(@(e)e.x, c)一次性提取。

假设你有

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 循环也更有效