2015-06-07 35 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) 

在这种情况下“输出”将是包含每个类的属性的值的单元阵列。