我有一个数组'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的输出显示在原帖中。
答案 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
。