Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何使一个表达式的值等于另一个表达式的第二个返回值_Matlab - Fatal编程技术网

Matlab 如何使一个表达式的值等于另一个表达式的第二个返回值

Matlab 如何使一个表达式的值等于另一个表达式的第二个返回值,matlab,Matlab,在Matlab中是否有一种惯用的方法将一个表达式的值绑定到另一个表达式的第n个返回值 例如,假设我想要一个索引数组,该数组对应于存储在单元格数组中的多个向量的最大值。我可以通过 函数I=max_索引(varargin) [~,I]=max(varargin{:}); cellfun(@max_index,my_数据); 但这需要定义一个函数(max_index),该函数特定于要在表达式中选择特定返回值的每种情况。我当然可以定义一个通用函数来实现我想要的: 函数y=n次返回(n,fun,vara

在Matlab中是否有一种惯用的方法将一个表达式的值绑定到另一个表达式的第n个返回值

例如,假设我想要一个索引数组,该数组对应于存储在单元格数组中的多个向量的最大值。我可以通过

函数I=max_索引(varargin)
[~,I]=max(varargin{:});
cellfun(@max_index,my_数据);
但这需要定义一个函数(
max_index
),该函数特定于要在表达式中选择特定返回值的每种情况。我当然可以定义一个通用函数来实现我想要的:

函数y=n次返回(n,fun,varargin) [vals{1:n}]=fun(varargin{:}); y=vals{n}; 把它叫做:

cellfun(@(x)第n次返回(2,@max,x),我的数据)

但是,添加这样的函数会降低代码片段的可移植性,使其更难理解。是否有一种惯用方法可以实现相同的结果,而不必依赖自定义的
nth\u return
函数?

据我所知,这在另一方面与您提到的解决方案不同。因此,只需使用以下语法:

[~,I]=max(var);
或者确实创建了一个额外的功能。但我也建议反对这种做法。如果您想在另一个函数中使用输出,只需编写额外的代码行。我在stackoverflow上发现了两个前面的问题,它们涉及相同的主题,似乎证实了这是不可能的


在一些版本之前,将~运算符添加到MATLAB中的原因是为了防止保存不需要的变量。如果存在与您正在搜索的语法类似的语法,则不需要这样做。

为什么要这样做?既然您已经知道要存储哪个返回值,[~,I]语法有什么问题?[~,I]语法不能作为表达式的一部分使用。也就是说,我不能在匿名函数中使用它,比如上面的cellfun()调用。谢谢。看来你是对的。不幸的是,[~,ans]=max(x)不支持作为表达式,因此有必要定义一个额外的函数。