我是 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 中)用更少的对象存储更大的数组,而不是用很多小对象。
关于arrays - 数组中每个类实例的调用方法(Matlab),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946448/