我在parfor-loop
正文中調用的函數中使用evalin
時出現問題。函數看起來如下:在parfor中使用evalin的matlab
function returnData = extractFun(input)
% assign close price to function call
x = evalin('base','data');
% extract prices
returnData = x(input);
end
和腳本調用該函數如下:
% data-array = n-by-1 double
data = [1:1000]';
% loop and extract data
parfor i = 1:10
% n-by-1 cell array containing 1-by-x doubles
% doubles in var1 contain valid indicies for the data-variable
var1 = {[1:10]; [1:30]};
% perform cell-function since, cell2mat will not work due to
% inconsistent dimensions of the double arrays contained in the cells
extractData = cellfun(@returnData,var1,'UniformOutput',false);
% do something with extractData
end
當我運行在parfor
-loop腳本,MATLAB拋出一個錯誤,該指數超過矩陣尺寸,這必須表示變量x
爲空(或未被正確評估)。奇怪的是,當我作爲正常的for
循環運行循環時,一切正常。我知道parfor
-loops的透明度問題,因此我將evalin
放入一個單獨的函數中。
我也將開放給我的問題的替代解決方案,它是從一個數據變量提取數據到一個n×1的單元格數組中,因爲doubles
沒有使用額外的循環,因爲我打算運行此循環具有非常高的迭代次數。
任何人都可以幫我嗎?謝謝!
已選擇使用該解決方案代替
cellfun
-call。你是對的 - 額外循環的額外處理時間並不像我想象的那麼糟糕,並且比cellfun快得多(很可能如你所說,因爲它實際上是一種循環)。謝謝你的幫助! – Benvaulter