对于任何函数,我能够通过明确定义我期望的输出数[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.
中的某些功能可以解决这个问题,但我没有看到任何文档或让它们中的任何一个工作。
答案 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);