gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:08 25 4
gpt4 key购买 nike

对于任何函数,我都可以通过显式定义我期望的输出数量来指示要返回的变量 [out1,out2,...,outn] = ...

编辑:能够最大化输出的潜在数量也很有用

示例问题

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

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

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

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

当我想要 myArray(I,J) = 1;

时,我有效地得到了 myArray(I) = 1;

问题

如何在不显式定义输出参数的情况下规定返回多少个输出变量?

我希望 eval() 系列中的某些函数或某些类型转换 [],{},(:) 等 可以解决问题,但我没有看过任何文档或让其中的任何文档起作用。

最佳答案

在没有中间变量的情况下直接使用 ind2sub 的输出作为 myArray 的索引的直接问题是只有 ind2sub 的第一个输出> 在索引到 myArray 时由 subsindex 请求。然后将第一个输出用作 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);

关于matlab - 在不设置输出变量的情况下强制函数调用的输出数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43144973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com