2011-07-29 23 views
3

可能重複:
How can I index a MATLAB array returned by a function without first assigning it to a local variable?如何在函數的輸出上使用索引?

我想在一個函數的輸出使用索引。我使用textscan函數來讀取非常大的文本文件(15 GB)。在我的情況下,textscan函數的返回值是一個1x1單元格數組,它包含一個非常大的數值數組。

而不是做的:

tmp = textscan(...); 
final_result = mat2cell(tmp{1,1}); 

我想這樣做:

final_result = mat2cell(textscan(...){1,1}); 

如果這樣的工作,這將避免非常大的臨時變量tmp目錄的創建。是否有另一種方法來避免臨時變量?

回答

0

在你仍然不知道的情況下,可以考慮下面的例子:

%# some function that returns a cell array (TEXTSCAN in your case) 
myFunc = @() {rand(5,5)}; 

%# normally you would write 
C = myFunc(); 
C = C{1,1}; 

這裏是鏈接的問題@gnovice答案的cellarray版本(醜,但工程):

%# equivalent to: C = myFunc(){1,1} 
C = subsref(myFunc(), struct('type','{}','subs',{{[1 1]}})) 
0

您不能像您所示直接索引函數的輸出。你可以做的是改變你的代碼如下:

final_result = textscan(...); 
final_result = mat2cell(final_result{1,1}); 

單元陣列的每個元素都包含指向其他mxArrays。因此,從單元陣列中提取數據時,可以簡單地將輸出mxArray指向相同的數據。使用final_result變量來保存單元格數組以及從中提取的內容可能足以告訴MATLAB JIT,它可以通過不進行中間複製來優化代碼。

相關問題