Matlab - 从对象数组中提取属性作为数组

时间:2015-06-07 14:46:57

标签: arrays matlab oop

如何从对象数组中提取对象属性数组(该数组中的每个对象都具有该属性?)

例如:

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()。

有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

基本上,代码会依次对每个成员起作用并返回一个单独的答案,所以最后只得到1x1的输出。

该示例中的解决方案是使用arrayfun(),例如:

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

这将为您提供一个1x135数组,其中包含从类数组中选择的每个元素中每个myProperty成员的值。

在arrayfun中,你给一个函数来对数组中的每个元素执行,然后对数组进行操作。在这种情况下,我创建了一个匿名函数,它只是访问x上的myProperty - 其中x依次是数组中的每个对象。

重要的是要注意,只有属性是单个值而不是矩阵/数组时,上述操作才有效。如果它是一个数组,那么输出将是不均匀的,你将不得不这样做:

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

在这种情况下,'output'将是一个包含每个类的属性值的单元格数组。