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

Bre*_*ick 3 matlab

对于任何函数,我能够通过明确定义我期望的输出数来指示要返回的变量 [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.可以解决问题,但我没有看到任何文档或者让它们中的任何一个工作.

Sue*_*ver 5

使用的输出立即问题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)