我是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);
您应该能够使用'函数形式'调用您的方法
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中)使用更少的对象存储更大的数组,而不是使用大量的小对象。