如何在函数的输出上使用索引?

时间:2011-07-29 12:11:22

标签: matlab

  

可能重复:
  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。还有另一种方法可以避免临时变量吗?

2 个答案:

答案 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]}}))