在不设置输出变量的情况下强制函数调用的输出数量

时间:2017-03-31 15:58:02

标签: matlab

对于任何函数,我能够通过明确定义我期望的输出数[out1,out2,...,outn] = ...来指示要返回的变量

编辑:能够最大化潜在的输出数量

示例问题

以下代码完全符合预期(是的,它对于myArray(IND) = 1;是多余的)

[I,J] = ind2sub(size(myArray),IND)
myArray(I,J) = 1;

当我尝试直接传递函数参数时,我没有得到我想要的结果

myArray(ind2sub(size(myArray),IND)) = 1;

当我想要myArray(I) = 1;

时,我会有效地获得myArray(I,J) = 1;

问题

如何在没有明确定义输出参数的情况下指示返回多少输出变量?

我希望eval()系列或某些类型转换[],{},(:), etc.中的某些功能可以解决这个问题,但我没有看到任何文档或让它们中的任何一个工作。

1 个答案:

答案 0 :(得分:5)

ind2sub的输出直接用作myArray的索引而没有中间变量的直接问题是ind2sub仅请求subsindex的第一个输出索引到myArray时。然后将第一个输出用作linear index索引到myArray并分配导致意外行为的值。

相反,您可以根据需要使用cell array to capture as many outputs,然后依靠{}索引来生成comma-separated list

[outputs{1:ndims(myArray)}] = ind2sub(size(myArray), IND);

然后,您可以使用包含所有输出的此单元格数组,然后将所有值转发为inputs or subscripts其他位置:

myArray(outputs{:}) = 1;

话虽如此,在您展示的示例中,您实际上不需要执行任何操作,因为您可以使用线性索引IND直接索引到myArray。的 In fact, using the output of ind2sub will likely give you the incorrect assignment as every permutation of the subscripts will be used when assigning values rather than the element-wise pairing of subscripts

myArray(IND) = 1;

通常,如果存在非可变数量的输出,您可以使用此技术与nargout一起请求所有输出参数

[outputs{1:nargout('func')}] = func(inputs);