Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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和Python?_Python_Matlab_Input_Output - Fatal编程技术网

返回变量Matlab和Python?

返回变量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

我正在尝试将一些代码从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
在节目的后面,有这样的内容:

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中,如果您希望使函数在正常到达终点之前提前停止,才需要该值。一旦达到终点标准