2015-11-02 87 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

相關問題