2016-06-11 149 views
1

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

我正在查找的结果是每个'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

UPDATE

输出返回[1×4结构]的行阵列。从卫生组织MY_STRUCTURES_Array

输出{1}返回任何

输出从卫生组织MY_STRUCTURES_Array回报:从卫生组织MY_STRUCTURES_Array

Name      Size    Bytes Class Attributes 

MY_STRUCTURES_Array  1x103   1371136 cell  

输出{1} .thisField返回任何从MY_STRUCTURES_Array {1

输出} .thisField在原始文章中显示。

+0

可以显示以下三个命令的输出:'MY_STRUCTURES_Array','whos MY_STRUCTURES_Array {1}'和'MY_STRUCTURES_Array {1} .thisField'? –

+0

@StewieGriffin - 查看更新。 – Jim

回答

1

你正在访问MY_STRUCTURES_ArrayMY_STRUCTURES_Array{1}这一事实表明它是一个单元阵列,所以我会根据这个答案做出回答。

假设我们有MY_STRUCTURES_Array作为结构阵列的单元阵列:

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

它包含N元件(这里N = 3)。每个元素都是一个包含4个元素和各种字段的结构数组。我们要提取字段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

EDIT值:使用arrayfun()

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

这个结构阵列的单元阵列转换成一个二维结构阵列,然后提取字段foo来自每个元素。