我是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);
答案 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中)使用更少的对象存储更大的数组,而不是大量的小对象。