我想在函数的输出上使用索引。我使用textscan函数来读取非常大的文本文件(15 GB)。在我的例子中,textscan函数的返回是一个1x1单元格数组,其中包含一个非常大的数字数组。
而不是:
tmp = textscan(...);
final_result = mat2cell(tmp{1,1});
我想这样做:
final_result = mat2cell( textscan(...){1,1} );
如果这样可行,则可以避免创建非常大的临时变量tmp。还有另一种方法可以避免临时变量吗?
答案 0 :(得分:0)
您无法直接索引函数的输出,如您所示。您可以做的是将代码更改为以下内容:
final_result = textscan(...);
final_result = mat2cell(final_result{1,1});
单元格数组的每个元素都包含指向其他mxArrays的指针。因此,当从单元阵列中提取数据时,可以简单地将输出mxArray指向相同的数据。使用final_result
变量来保存单元格数组以及从中提取的内容可能足以告诉MATLAB JIT它可以通过不制作中间副本来优化代码。
答案 1 :(得分: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]}}))