Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop matlab的getter/setter方法。为什么他们让我的程序超慢?_Oop_Matlab_Setter_Getter - Fatal编程技术网

Oop matlab的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

仅仅在我的程序中添加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 = '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方法保持忙碌。请发布整个代码,包括类定义。可能重复