Matlab arrayfun,包含[1x4 struct]

时间:2016-06-11 21:04:35

标签: arrays matlab structure

我有一个数组'MY_STRUCTURES_Array',有单行和N列。每个元素都是[1x4结构]。我想从每个[1x4 struct]元素的每个结构中提取一个数值“thisField”。

我要查找的结果是每个'thisField'值的4xN值数组,其中此结果中的每一行对应于[1x4结构]中的列。

我使用的代码是:

arrayfun(@(x) (x.thisField),   MY_STRUCTURES_Array);

Matlab返回错误

Attempt to reference field of non-structure array.

如果我在命令行中添加以下内容,

MY_STRUCTURES_Array{1}

我得到[1x4结构]的所有字段的列表。

如果我把它放在命令行中,

MY_STRUCTURES_Array{1}.thisField

我得到四个答案,如下:

ans =

       1


ans =

       1


ans =

       1


ans =

       0

如果我查看尺寸

size(MY_STRUCTURES_Array{1}.thisField)

Matlab说“使用大小时出错”,所以我看到这不是一个数组。但我不确定它是什么。

我不知道如何继续获取我正在寻找的4xN阵列。

更新

命令输出MY_STRUCTURES_Array返回[1x4 struct]的行数组。

MY_STRUCTURES_Array {1}的输出

MY_STRUCTURES_Array返回的输出:

 Name                     Size               Bytes  Class    Attributes

 MY_STRUCTURES_Array      1x103            1371136  cell      

MY_STRUCTURES_Array {1}的输出.thisField什么都不返回

MY_STRUCTURES_Array {1} .thisField的输出显示在原帖中。

1 个答案:

答案 0 :(得分:1)

您以MY_STRUCTURES_Array的身份访问MY_STRUCTURES_Array{1}表明它是一个单元格数组,因此我会根据此回答。

假设我们将MY_STRUCTURES_Array作为struct arrays的单元格数组:

MY_STRUCTURES_Array = {[1x4 struct], [1x4 struct], [1x4 struct]}

它包含N个元素(此处N = 3)。每个元素都是一个包含4个元素和各种字段的struct数组。我们想要提取字段foo的值,其中包含一个数字。

out = zeros(4, N);

for it = 1 : N
    out(:, it) = [MY_STRUCTURES_Array{it}.foo];
end

out(i, j)现在包含MY_STRUCTURES_Array{j}(i).foo

的值

编辑:

使用arrayfun()

out = arrayfun(@(x) x.foo, cell2mat(MY_STRUCTURES_Array')')

这会将struct数组的单元格数组转换为2d struct数组,然后从每个元素中提取字段foo