2015-06-07 48 views
0

我如何提取對象屬性的陣列從一個對象數組Matlab的 - 提取屬性從對象陣列陣列

例:

(其中每個陣列內的對象的具有該屬性?)
classdef myClass 
    properties 
     myProperty = 1 
    end 
end 

-

myObjectMatrix(1:1000) = myClass() 
myObjectMatrix(100:234).myProperty % what I thought would work but results in lots of individual results 

[myObjectMatrix(100:234).. myProperty的]的作品,但是僅在一個維度。如果我有多個維度將結果「摺疊」回來,則需要使用reshape()。

有沒有更好的方法?

謝謝!

回答

2

基本上,代碼將依次作用於每個成員並返回一個單獨的答案,因此最終只能得到1x1輸出。

在實施例中的解決方案是使用arrayfun(),如:

myObjectMatrix(1:1000) = myClass() 
output = arrayfun(@(x) x.myProperty,myObjectMatrix(100:234)) 

這將使您從每個從選定的元素的含有每種myProperty的部件的值的1x135陣列類數組。

在arrayfun中,您給出了一個函數來執行數組中的每個元素,然後執行數組。在這種情況下,我創建了一個匿名函數,它只需訪問x上的myProperty,其中x將依次是數組中的每個對象。


重要的是要注意,如果屬性是單個值而不是矩陣/數組,則上述操作纔有效。如果它是一個數組那麼輸出將是不均勻的,並且你將不得不做:

output = arrayfun(@(x) x.myProperty,myObjectMatrix(100:234),'UniformOutput', false) 

在這種情況下「輸出」將是包含每個類的屬性的值的單元陣列。