【问题标题】:Matlab: Calculate function of each object in an object arraysMatlab:计算对象数组中每个对象的函数
【发布时间】:2019-01-17 18:03:57
【问题描述】:

这是我的第一个问题,所以我希望我能正确地进行标记等等。

我有一个相同类的对象数组。当我想访问我可以使用的对象的属性时:

Data = [ObjectArray.property]; 

现在我想为每个对象调用一个类的方法并将结果作为 Vektor/ 矩阵返回:

result = [ObjectArray.myfun(X)] 

这里我收到一条错误消息:

大括号或点索引表达式的预期输出

我尝试了蛮力几个不同的注释,但没有任何效果,我在网上找不到解决方案。 任何人都知道如何使这项工作?

感谢和干杯!

【问题讨论】:

    标签: arrays matlab oop object


    【解决方案1】:

    有点不清楚你的数组结构是什么,但你应该可以使用arrayfun

    result = arrayfun( @(obj) obj.myfun(x), ObjectArray );
    

    如果您的函数 myfun 返回标量以外的任何值,则需要将 UniformOutput 标志设置为 false。这将使结果成为一个单元格数组,每个结果一个单元格。

    result = arrayfun( @(obj) obj.myfun(x), ObjectArray, 'uni', false );
    % If you want to concatenate results, could use something like
    % result = [result{:}];
    

    请注意,这基本上是循环的简写,但它可以节省您预先分配输出和编写循环的时间。

    【讨论】:

    • 感谢 Wolfie!我希望有比循环更快的解决方案,但 arrayfun 正在工作。
    • @Ray 可能有更快的方法,但这完全取决于您的类、您正在实现的方法和代码的结构。仅凭您提供的信息无法提供量身定制的解决方案。
    【解决方案2】:

    您也可以直接在 myfun 中执行此操作:

    如果您操作方法的项目是数组,则 myfun 方法的第一个参数将是数组。这个可以用,一一调用自己:

    vec = [MyClass(1), MyClass(2)];
    list = vec.myfun();
    
    
    classdef MyClass
    properties
        prop1
    end
    
    methods
        function obj = MyClass(val)
            obj.prop1 = val;
        end
        function val = myfun(obj)
           if numel(obj) > 1
               val = arrayfun(@(o) o.myfun(), obj);
               return;
           end
           val = obj.prop1;
        end
    end    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 2019-04-30
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多