我正在将Matlab代码转换为Python版本。Matlab代码使用最大似然估计mle
函数来拟合一组Rayleigh和Rice分布的样本。
然后,它使用pdf
函数计算某些点的pdf值(给定估计参数)。
Python中的等价函数是scipy.stast.rayleigh/rice.fit
。问题是,例如,Python中的Rayleigh函数是标准化版本,它返回位置和比例参数,而Matlab mle
只返回比例参数。与Rice的情况类似,Python版本返回3个参数,而Matlab只有两个参数(根据Rice分布的定义)。
我知道对于正态分布,位置=均值,尺度=方差,所以我预计对于Rayleigh,Mtalb中的尺度与Python中的尺度相同,但似乎它们的使用方式不同。当我在代码中使用参数时,问题显然会传播,因为我没有1to1匹配,
有没有一种方法可以在Python中实现与Matlab相同的“行为”?
很抱歉这个愚蠢的问题,但Scipy的文档,在我看来,不是很完整。
谢谢你
1条答案
按热度按时间wxclj1h51#
根据Matlab文档:
的数据
对比SciPy文档:
的
然而,在SciPy中,所有概率分布都有
loc
和scale
参数:的
因此,要在SciPy中获得与Matlab中相同的行为,请设置
loc = 0
和scale = b
。例如:
在SciPy中:
字符串
Rice的情况类似。在Matlab中:
的
SciPy:
型
因此,为了让SciPy与Matlab一致,设置
loc=0
,scale=sigma
和b = s/sigma
。型
型