为数组中的每个类实例调用方法(Matlab)

时间:2011-10-30 17:11:06

标签: arrays oop matlab object multidimensional-array

我是Matlab的新手,我被告知,在阵列上执行相同的操作时,使用点运算符代替for循环会更快。

示例:

A = 1:200
A = A .* 10;

而不是:

A = 1:200
for i = 1:200
    A(i) = A(i) * 10;
end

我创建了一个多维对象数组(对象是我创建的类的实例)。是否可以在不使用for循环的情况下在所有实例上使用相同的参数调用相同的方法?

我尝试了这3种方法,但它们不起作用(A是三维数组):

A(:,:,:).methodName(argument1, argument2);
A.methodName(argument1, argument2);
A..methodName(argument1, argument2);

1 个答案:

答案 0 :(得分:4)

您应该可以使用“功能表单”

调用您的方法
methodName(A, argument1, argument2)

但是,'methodName'需要处理你传递了一个对象数组的事实。这是一个简单的例子

classdef Eg
    properties
        X
    end
    methods
        function obj = Eg( arg )
            if nargin == 0
                % Default-constructor required
                arg = [];
            end
            obj.X = arg;
        end
        function x = maxX( objs )
        % collect all 'X' values:
            xVals = [objs.X];
            % return the max
            x = max( xVals(:) );
        end
    end
    methods ( Static )
        function testCase()
        % Just a simple test case to show how this is intended to work.
            for ii = 10:-1:1
                myObjArray(ii) = Eg(ii);
            end
            disp( maxX( myObjArray ) );
        end
    end
end

如果可能,最好(在MATLAB中)使用更少的对象存储更大的数组,而不是大量的小对象。

相关问题