返回变量Matlab和Python?
我正在尝试将一些代码从Matlab翻译成Python。我的函数(在Matlab中)的开始如下所示:返回变量Matlab和Python?,python,matlab,input,output,Python,Matlab,Input,Output,我正在尝试将一些代码从Matlab翻译成Python。我的函数(在Matlab中)的开始如下所示: function [varargout]=hysime(varargin); error(nargchk(3, 4, nargin)) if nargout > 2, error('too many output parameters'); end verbose = 1; % default value y = varargin{1}; % 1st para
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
在节目的后面,有这样的内容:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
最后是:
varargout(1) = {kf};
if nargout == 2, varargout(2) = {Ek};end
return
我对这段代码的含义感到非常困惑。一方面,我知道输入的参数都需要返回。然而,在程序结束时,似乎只返回2个变量(而我们输入3?)。如何翻译此代码以便返回必要的参数?我想我这里最大的问题是,matlab代码允许代理输入参数,但它们似乎都不是必需的?看起来输出不能超过两个?我只是在破译这里的每一行代码时遇到了麻烦。有人能解释一下matlab代码发生了什么,以及我能做些什么来在python中实现相同的功能吗
谢谢 短版 MATLAB代码应该是这样编写的:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
长版本
此函数需要3或4个输入参数,如果未提供第四个参数,则设置默认值。然而,它是以一种比需要复杂得多的方式完成的(尽管我经常看到这种模式)。理想情况下,在MATLAB中,您可以指定如下内容:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
这使得y
、n
和Rn
成为必需的参数,但允许verbose
成为可选参数
这不处理verbose
设置为字符串“off”
的情况。正如我所说的,由于历史原因,这在MATLAB中很常见,但如果可以避免的话,就不应该再在MATLAB中使用它,而且绝对不应该在Python中使用它。但如果你真的,真的需要处理这种情况,你可以:
def hysime(y, n, Rn, verbose=True):
if isinstance(verbose, str):
verbose = verbose.lower() != 'off'
对于输出,MATLAB代码所做的是让函数返回一个值或两个值。所以有人可以这样做:
kf = hysime(y, n, Rn);
或
然而,这也是以一种比必要的更复杂的方式进行的。如果只返回两个值,并且只使用一个返回值,那么MATLAB将丢弃其余的值。因此,该函数可以返回[kf,Ek]
,而不是与varargout
混在一起,MATLAB也会做同样的事情。如果有人试图调用具有2个以上输出的函数,则会自动发生错误,因此这也是不必要的
只有当您希望程序根据输出的数量更改其行为时,才需要以这种方式处理varargout
。在这种结构中,您这样做的主要原因是如果eK
的计算成本很高,在这种情况下,您可以这样做:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
至于返回值
,只有在MATLAB中,如果您希望使函数在正常到达终点之前提前停止,才需要该值。一旦它正常到达终点,它将自动返回。因此,如果您指定的最后一个代码块是函数的结尾,则返回的是多余的
因此,您在MATLAB中显示的所有代码都可以简化为:
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
如果他们只想要kf
,那么他们可以这样做(其中\uu
是您不关心的变量的python约定):
或:
因此,python代码应该是:
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
如果您确实希望能够有一个或两个返回值,则需要有另一个参数来更改行为。例如:
def hysime(y, n, Rn, verbose=True, ret_eK=False):
# rest of the function here
return (kf, Ek) if ret_eK else kf
因此,在这种情况下,如果指定了ret_eK
参数并将其设置为True
,则返回kf,eK
,否则只返回kf
。但在Python中,除非在计算Ek
时有一些重大的额外成本,否则您真的不想这样做,而在这种情况下,这似乎是不存在的。Short version
MATLAB代码应该是这样编写的:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
长版本
此函数需要3或4个输入参数,如果未提供第四个参数,则设置默认值。然而,它是以一种比需要复杂得多的方式完成的(尽管我经常看到这种模式)。理想情况下,在MATLAB中,您可以指定如下内容:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
这使得y
、n
和Rn
成为必需的参数,但允许verbose
成为可选参数
这不处理verbose
设置为字符串“off”
的情况。正如我所说的,由于历史原因,这在MATLAB中很常见,但如果可以避免的话,就不应该再在MATLAB中使用它,而且绝对不应该在Python中使用它。但如果你真的,真的需要处理这种情况,你可以:
def hysime(y, n, Rn, verbose=True):
if isinstance(verbose, str):
verbose = verbose.lower() != 'off'
对于输出,MATLAB代码所做的是让函数返回一个值或两个值。所以有人可以这样做:
kf = hysime(y, n, Rn);
或
然而,这也是以一种比必要的更复杂的方式进行的。如果只返回两个值,并且只使用一个返回值,那么MATLAB将丢弃其余的值。因此,该函数可以返回[kf,Ek]
,而不是与varargout
混在一起,MATLAB也会做同样的事情。如果有人试图调用具有2个以上输出的函数,则会自动发生错误,因此这也是不必要的
只有当您希望程序根据输出的数量更改其行为时,才需要以这种方式处理varargout
。在这种结构中,您这样做的主要原因是如果eK
的计算成本很高,在这种情况下,您可以这样做:
function [varargout]=hysime(varargin);
error(nargchk(3, 4, nargin))
if nargout > 2, error('too many output parameters'); end
verbose = 1; % default value
y = varargin{1}; % 1st parameter is the data set
n = varargin{2}; % the 2nd parameter is the noise
Rn = varargin{3}; % the 3rd parameter is the noise correlation matrix
if nargin == 4, verbose = ~strcmp(lower(varargin{4}),'off');end
function [kf, Ek]=hysime(y, n, Rn, verbose);
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
def hysime(y, n, Rn, verbose=True):
# rest of the function here
return kf, Ek
function [varargout]=hysime(y, n, Rn, verbose)
error(nargchk(3, 4, nargin))
if nargin < 4
verbose = true;
else
verbose = ~strcmpi(verbose ,'off');
end
varargout(1) = {kf};
if nargout == 2
# calculate eK here
varargout(2) = {Ek};
end
至于返回值
,只有在MATLAB中,如果您希望使函数在正常到达终点之前提前停止,才需要该值。一旦达到终点标准