Matlab对象数组的逻辑索引

时间:2014-09-11 12:45:38

标签: arrays matlab oop object indexing

Matlab R2011b中是否有任何方法可以将逻辑索引应用于对象数组?应该返回满足其属性的特定条件的对象。最好的解决方案也可以是对象数组,它是另一个对象(聚合)的属性。

在我的项目中,有许多实体必须通过它们的多种特征来识别。具有其属性的Matlab对象为此提供了明确的数据基础。使用结构(或单元格)和索引数组的替代方法似乎太混乱了。不幸的是,对对象属性的访问有点复杂。

例如,应返回myArray中Element.val == 3的所有对象:

elementsValIsThree = myElements(Element.val==3);

目前为止的最佳解决方案:

find([myElements.val]==3);

但是如果输入了myElements的子集,那么这不会返回对象而不是绝对索引。

另一次尝试只返回第一个Element,需要常量属性:

myElements(Element.val==3);

具有类定义等的最小示例以便澄清:

% element.m
classdef Element
    properties
        val
    end
    methods
        function obj = Element(value)
            if nargin > 0 % to allow empty construction
                obj.val = value;
            end
        end
    end   
end

创建元素对象数组:

myElements(4) = Element(3)

现在myElements(4)val=3

1 个答案:

答案 0 :(得分:2)

我不确定我是否理解了这个问题,但逻辑索引可以生成为

arrayfun(@(e) isequal(e.val,3), myElements);

因此,选择myElements字段等于val的{​​{1}}元素:

3