如何从对象数组中提取对象属性数组(该数组中的每个对象都具有该属性?)
例如:
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()。
有更好的方法吗?
谢谢!
答案 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'将是一个包含每个类的属性值的单元格数组。