2015-11-02 90 views
1

我遇到了严重的性能问题,即访问数组的(依赖)属性的单个值。看起来,当获得一个值时,属性的完整数组被返回,并在稍后索引Matlab OOP:在数组属性上调用get函数时会发生什么?

在一个数组属性上调用get函数时会发生什么?

代码示例:

% class definition 
classdef ArrayProp 
    properties 
     array 
    end 
    methods 
     function obj = ArrayProp(input) 
      obj.array = input; 
     end 
     function output = get.array(obj) 
      output = obj.array 
      numel(obj.array) 
      numel(output) 
     end 
    end 
end 

% test script 
array   = rand(2,1); 
myArray  = ArrayProp(array); 
returnedValue = myArray.array(1) 

% command window result 
output = 
0.6180 
0.7304 
ans = 
2 
ans = 
2 
returnedValue = 
0.6180 

请注意的是,输出的元素的数量是2,但只1值被返回到该变量。该实验使用Matlab2011b进行。

回答

2

您的观察结果是正确的。

基本上,内部发生(MATLAB是闭源的,这显然只是或多或少受过教育的猜测)是类似如下:

您的代码:

returnedValue = myArray.array(1) 

内部:

intermediate = myArray.array; # this invokes get.array(myArray) 
returnedValue = intermediate(1); 

如果你想一想 - 这是做这件事唯一合理的方法。 任何其他方式都要求get.array(obj)方法必须知道结果值会发生什么 - 这将使“通用”实现变得复杂得多。

+0

好的,谢谢!因此,访问单个值的另一种方法是通过索引,例如, 'function out = getArray(obj,ind); OUT = obj.array(IND); end'。或超载子参考... – JaBe

+1

正确。我会去第一个版本 - 实现subsref可能是一个真正的痛苦。 – sebastian

相关问题