2016-06-11 90 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來自每個元素。