Matlab OOP:在数组 属性 上调用 get 函数时到底发生了什么?
Matlab OOP: What happens exactly when a get function is called on a property that is an array?
我在获取访问作为数组的(相关)属性的单个值时遇到了严重的性能问题。似乎在获取值时,返回了 属性 的完整数组,并在 later.
上进行了索引
在数组 属性 上调用 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进行
您的观察是正确的。
基本上,内部发生的事情(MATLAB 是闭源的,这显然只是或多或少有根据的猜测)类似于以下内容:
您的代码:
returnedValue = myArray.array(1)
内部:
intermediate = myArray.array; # this invokes get.array(myArray)
returnedValue = intermediate(1);
如果您考虑一下 - 这是唯一合理的方法。
任何其他方式都要求 get.array(obj)
方法必须知道结果值会发生什么——这会使 "universal" 实现更加复杂。
我在获取访问作为数组的(相关)属性的单个值时遇到了严重的性能问题。似乎在获取值时,返回了 属性 的完整数组,并在 later.
上进行了索引在数组 属性 上调用 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进行
您的观察是正确的。
基本上,内部发生的事情(MATLAB 是闭源的,这显然只是或多或少有根据的猜测)类似于以下内容:
您的代码:
returnedValue = myArray.array(1)
内部:
intermediate = myArray.array; # this invokes get.array(myArray)
returnedValue = intermediate(1);
如果您考虑一下 - 这是唯一合理的方法。
任何其他方式都要求 get.array(obj)
方法必须知道结果值会发生什么——这会使 "universal" 实现更加复杂。