我正在try 将一些代码从MatLab移植到Python,我意识到MatLab中的gevfit函数似乎与Scipy genextreme的行为不同,所以我意识到了这个最小的例子:

MATLAB

% Create the MATLAB array
x = [0.5700, 0.8621, 0.9124, 0.6730, 0.5524, 0.7608, 0.2150, 0.5787, ...
           0.7210, 0.7826, 0.8181, 0.5449, 0.7501, 1.1301, 0.7784, 0.5378, ...
           0.9550, 0.9623, 0.6865, 0.6863, 0.6153, 0.4372, 0.5485, 0.6318, ...
           0.5501, 0.8333, 0.8044, 0.9111, 0.8560, 0.6178, 1.0688, 0.7535, ...
           0.7554, 0.7123, 0.7589, 0.8415, 0.7586, 0.3865, 0.3087, 0.7067];

disp(numbers);

parmHat = gevfit(x);

disp('Estimated parameters (A, B):');
disp(parmHat);

估计参数(A,B):-0.3351 0.1962 0.6466

巨 Python

import numpy as np
import scipy.stats as stats

x = np.array([0.5700, 0.8621, 0.9124, 0.6730, 0.5524, 0.7608, 0.2150, 0.5787,
                    0.7210, 0.7826, 0.8181, 0.5449, 0.7501, 1.1301, 0.7784, 0.5378,
                    0.9550, 0.9623, 0.6865, 0.6863, 0.6153, 0.4372, 0.5485, 0.6318,
                    0.5501, 0.8333, 0.8044, 0.9111, 0.8560, 0.6178, 1.0688, 0.7535,
                    0.7554, 0.7123, 0.7589, 0.8415, 0.7586, 0.3865, 0.3087, 0.7067])

# Fit the GEV distribution to the data
parameters3 = stats.genextreme.fit(x)

print("Estimated GEV parameters:", parameters3)

估计GEV参数:(1.0872284332032054,0.534605335200113, 0.6474387313912493)

我希望参数相同,但结果完全不同.有什么帮助吗?

推荐答案

方法genextreme.fit不能计算正确的结果.您可以通过为数值求解器提供比genextreme.fit使用的默认值更好的初始值来帮助它生成正确的值.通过提供形状、位置和比例参数的值来设置初始值:

In [29]: from scipy.stats import genextreme

In [30]: x = np.array([0.5700, 0.8621, 0.9124, 0.6730, 0.5524, 0.7608, 0.2150, 0.5787,
    ...:                     0.7210, 0.7826, 0.8181, 0.5449, 0.7501, 1.1301, 0.7784, 0.5378,
    ...:                     0.9550, 0.9623, 0.6865, 0.6863, 0.6153, 0.4372, 0.5485, 0.6318,
    ...:                     0.5501, 0.8333, 0.8044, 0.9111, 0.8560, 0.6178, 1.0688, 0.7535,
    ...:                     0.7554, 0.7123, 0.7589, 0.8415, 0.7586, 0.3865, 0.3087, 0.7067])
    ...: 

In [31]: genextreme.fit(x, 0.34, loc=0.65, scale=0.20)  # Include initial guess of the parameters
Out[31]: (0.33513328610099824, 0.6466250071208526, 0.19615018966970216)

请注意,本网站genextreme使用的参数c是MatLab中参数k的负值.还要注意的是,SciPy中参数的顺序是clocationscale,而在MatLab中是kscalelocation.

Python相关问答推荐

删除最后一个pip安装的包

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

Pandas 都是(),但有一个门槛

如何在python polars中停止otherate(),当使用when()表达式时?

有没有一种方法可以从python的pussompy比较结果中提取文本?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

如何设置视频语言时上传到YouTube与Python API客户端

在matplotlib中删除子图之间的间隙_mosaic

如何在PySide/Qt QColumbnView中删除列

使用Python异步地持久跟踪用户输入

根据Pandas中带条件的两个列的值创建新列

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

高效生成累积式三角矩阵

Pythonquests.get(Url)返回Colab中的空内容

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

BeatuifulSoup从欧洲志愿者服务中获取数据和解析:一个从EU-Site收集机会的小铲子

try 在单个WITH_COLUMNS_SEQ操作中链接表达式时,使用Polars数据帧时出现ComputeError

如何将django url参数传递给模板&S url方法?

使用元组扩展字典的产品挑战

如何在networkx图中提取和绘制直接邻居(以及邻居的邻居)?