Matlab 定义具有多个输出的函数,这些输出可以';不能组织成矩阵
是否有任何自然的方法来定义一个具有多个输出的MATLAB函数,而这些输出不能或不适合“叠加”到矩阵中?例如,如果我想要一个函数Matlab 定义具有多个输出的函数,这些输出可以';不能组织成矩阵,matlab,function,output,containers,grouping,Matlab,Function,Output,Containers,Grouping,是否有任何自然的方法来定义一个具有多个输出的MATLAB函数,而这些输出不能或不适合“叠加”到矩阵中?例如,如果我想要一个函数f,它返回一个3x3矩阵a和一个4x4矩阵B 我真的很惊讶,这甚至会成为MATLAB中的一个问题。因为在Python中,我们需要做的就是返回A,B,它返回两个元组。然而,MATLAB似乎并不完全支持容器的概念。作为一种非优雅的解决方法,我可以使用struct将两段数据放入,函数如下所示: function re = f(x) %f: returns two dimensi
f
,它返回一个3x3
矩阵a
和一个4x4
矩阵B
我真的很惊讶,这甚至会成为MATLAB中的一个问题。因为在Python中,我们需要做的就是返回A,B
,它返回两个元组。然而,MATLAB似乎并不完全支持容器的概念。作为一种非优雅的解决方法,我可以使用struct
将两段数据放入,函数如下所示:
function re = f(x)
%f: returns two dimensional-inconsistent matrices A and B
% function body as follows
....
A = ...;
B = ...;
% put data into the struct 're'
re.A = A;
re.B = B;
end
除了可能的性能问题外,这种方法看起来非常不自然和笨拙。有更好的方法吗?在MATLAB中,您可以使用以下语法返回任意数量的输出:
function [A,B] = f(x)
A = ...;
B = ...;
end
这是一个比python中使用的元组更优雅的解决方案。
您甚至可以通过输入和输出的数量来控制行为(nargin
和nargout
),并使用波浪线丢弃输出。
我想不出更优雅的语法了。通常,当有多个输出时,应该按如下方式声明函数:
function [out1, out2, ... , outN] = funcName(in1,...,inM)
...
end
MATLAB还允许您分别根据通过/函数请求的输入/输出量来改变函数的行为(您可以将其视为一种重载形式)
例如,您可以指定一个数组作为输入之一,该数组指示您希望函数给出哪些输出,然后相应地填充单元格数组:
function varargout = funcName(in1,...,whichOut)
...
for indO = 1:numel(whichOut)
switch whichOut{indO}
case 'out1'
varargout{indO} = out1;
case 'out2'
... etc
case 'out6'
varargout{indO} = out6;
end
end
然后使用[out6,out1]=funcName(inp,{'out6','out1'})调用它代码>
另请参见。我不理解这个问题,只需将输出定义为[A,B]当然?@nkjt很抱歉,我在考虑如何使其像Python一样工作。是的,你完全正确。只是在matlab中,如果我只想访问函数的第二个输出,我需要付出更多的努力,就像在这个例子中,[~,second\u out]=f(x)代码>而在Python中,我只能执行second\u out=f(x)[1]
。Matlab不太支持容器的概念。与Python的列表或元组(可能是异构事物的容器)等效的是,我想不出更优雅的语法:-D