【问题标题】:Matlab - Extract properties as array from object-arrayMatlab - 从对象数组中提取属性作为数组
【发布时间】:2015-08-22 01:49:23
【问题描述】:

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

例如:

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

有没有更好的办法?

谢谢!

【问题讨论】:

    标签: arrays matlab oop


    【解决方案1】:

    基本上,该代码会依次作用于每个成员并返回单独的答案,因此最终您只会得到 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)
    

    在这种情况下,“输出”将是一个包含每个类的属性值的元胞数组。

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 2022-01-10
      相关资源
      最近更新 更多