Вызов метода для каждого экземпляра класса в массиве (Matlab) - PullRequest
4 голосов
/ 30 октября 2011

Я новичок в 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 Ответ

4 голосов
/ 31 октября 2011

Вы должны иметь возможность вызывать свой метод, используя «функциональную форму»

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) иметь меньше объектов, хранящих большие массивы, чем множество мелких объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...