Oop matlab的getter/setter方法。为什么他们让我的程序超慢?
仅仅在我的程序中添加getter/setter方法就让我的程序非常慢。有什么解释吗Oop matlab的getter/setter方法。为什么他们让我的程序超慢?,oop,matlab,setter,getter,Oop,Matlab,Setter,Getter,仅仅在我的程序中添加getter/setter方法就让我的程序非常慢。有什么解释吗 function set.x(obj,newx) obj.x = newx; end function x = get.x(obj) x = obj.x; end 这就是我在handle类下定义它们的方式。 或者我只是没有正确地实施它们 编辑 类定义将 classdef sensorlocest < handle properties(GetAcess
function set.x(obj,newx)
obj.x = newx;
end
function x = get.x(obj)
x = obj.x;
end
这就是我在handle类下定义它们的方式。
或者我只是没有正确地实施它们
编辑
类定义将
classdef sensorlocest < handle
properties(GetAcess = 'public', SetAccess = 'private')
sensorId; % sensor id
X; % true x-coordainate
Y; % true y-coordinate
x; % estimate of X
y; % estimate of Y
end
methods
function sesnors = sensorlocest(x,y)
if nargin ~= 0
sesnors(49,1) = sensorlocest;
for k = 1:length(sensors)
sensors(k).sesnorId = k;
sensors(k).X = x.*rand;
sensors(k).Y = y.*rand;
end
end
function init(sensors,x,y)
N = length(sensors);
for i = 1:N
sensors(i).x = x.*rand;
sensors(i).y = y.*rand;
end
end
function set.x(sensors,newx)
sensors.x = newx;
end
function set.y(sensors,newy)
sensors.y = newy;
end
end
end
classdef sensorlocest
不,你是对的。它们确实有开销,请查看以下线程:
所以我对此无能为力?@tman,看看线程-根据基准测试,Matlab2012a似乎更好一些。您还可以重新设计系统,以减少对getter/setter的调用。@tman:如果您不需要setter/getter方法,只需跳过它们即可。如果您确实需要它们,您可以通过在循环外部调用它们,或者仅在方法的开始和结束时调用它们,同时将
x
的内容存储在临时变量中,来最小化对getter/setter的调用次数。是的。这似乎增加了问题,因为我有一个对象数组,因此必须循环所有对象设置变量。这会导致许多对setter方法的调用。@Andrey,我该如何使用向量化的方法呢?刚刚在我的问题上添加了编辑示例代码,使setter方法保持忙碌。请发布整个代码,包括类定义。可能重复