2011-07-29 7 views
3

可能性の重複:
How can I index a MATLAB array returned by a function without first assigning it to a local variable?関数の出力にインデックスを使用するにはどうすればよいですか?

私は、関数の出力にインデックスを使用したいと思います。私は非常に大きなテキストファイル(15 GB)を読むためにtextscan関数を使用します。私のケースでは、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答えのセルアレイ・バージョンは、リンクされた質問(醜いが、作品)である:

%# 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に伝えるだけで十分です。

関連する問題