对于任何函数,我能够通过明确定义我期望的输出数来指示要返回的变量 [out1,out2,...,outn] = ...
编辑:能够最大化潜在的输出数量也很有用
示例问题
以下代码完全符合预期(是的,它是多余的myArray(IND) = 1;
)
[I,J] = ind2sub(size(myArray),IND)
myArray(I,J) = 1;
Run Code Online (Sandbox Code Playgroud)
当我尝试直接传递函数参数时,我得不到我想要的结果
myArray(ind2sub(size(myArray),IND)) = 1;
Run Code Online (Sandbox Code Playgroud)
我有意义的myArray(I) = 1;
时候得到了myArray(I,J) = 1;
题
如何在不明确定义输出参数的情况下指示返回多少输出变量?
我希望eval()
家庭中的某些功能或某些类型转换[],{},(:), etc.
可以解决问题,但我没有看到任何文档或者让它们中的任何一个工作.
使用的输出立即问题ind2sub
直接作为一个指数到myArray
而没有中间变量是,只有所述第一输出ind2sub
是由请求subsindex
进行索引时myArray
.然后将第一个输出用作索引和分配值的线性索引,myArray
从而导致您的意外行为.
相反,您可以使用单元格数组捕获任意数量的输出,然后依靠{}
索引生成逗号分隔列表.
[outputs{1:ndims(myArray)}] = ind2sub(size(myArray), IND);
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用包含所有输出的此单元格数组,然后将所有值作为输入或下标转发到其他位置:
myArray(outputs{:}) = 1;
Run Code Online (Sandbox Code Playgroud)
话虽如此,在您展示的示例中,您实际上不需要执行任何操作,因为您可以使用线性索引直接IND
索引myArray
.事实上,使用输出ind2sub
可能会给你不正确的赋值,因为在分配值而不是下标的元素配对时,将使用下标的每个排列.
myArray(IND) = 1;
Run Code Online (Sandbox Code Playgroud)
通常,如果存在非可变数量的输出,您可以使用此技术nargout
来请求所有输出参数.
[outputs{1:nargout('func')}] = func(inputs);
Run Code Online (Sandbox Code Playgroud)