scipy:如何使用 weibull_min.pdf?
scipy: How do I use weibull_min.pdf?
我发现 scipy
的 weibull_min
pdf
功能不直观且难以使用。我想生成比例为 30 且形状为 2.5 的 weibull PDF。这应该是这样的:
这是我到目前为止尝试过的方法:
import matplotlib.pyplot as plt
from scipy.stats import weibull_max, uniform
import numpy as np
aoas = np.linspace(0, 8, 1000)
speeds = np.linspace(1, 80, 1000)
plt.fill_between(speeds, speeds * 0, weibull_max.pdf(speeds, 2.5, 30), facecolor='k')
plt.ylabel('Probability Density')
plt.savefig('speedDist.pdf')
plt.clf()
当然,我的代码是错误的。文档说 weibull_min
期望 pdf(x, c, loc=0, scale=1)
,其中 x
是分位数,c
是形状因子,scale
是比例因子。但是,当我将代码更改为 weibull_max.pdf(speeds, 2.5, 0, 30)
时,输出 pdf 仅由零值组成。所以,我很困惑。如何生成所需的 Weibull PDF?
你的代码有两个问题。
weibull_min
和 weibull_max
不是同一个分布。您在问题的标题和描述中引用了weibull_min
,但在代码中使用了weibull_max
。要匹配您显示的情节,请使用 weibull_min
.
pdf
方法的参数为(x, shape, loc, scale)
。您编写了 pdf(speeds, 2.5, 30)
,它为 loc
参数分配了 30。相反,您应该使用 pdf(speeds, 2.5, scale=30)
这是您的脚本的一个变体:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import weibull_min
speeds = np.linspace(0, 80, 1000)
p = weibull_min.pdf(speeds, 2.5, scale=30)
plt.plot(speeds, p, 'b', linewidth=1)
plt.fill_between(speeds, speeds * 0, p, facecolor='b', alpha=0.1)
plt.ylabel('Probability Density')
plt.show()
它生成这个图:
我发现 scipy
的 weibull_min
pdf
功能不直观且难以使用。我想生成比例为 30 且形状为 2.5 的 weibull PDF。这应该是这样的:
这是我到目前为止尝试过的方法:
import matplotlib.pyplot as plt
from scipy.stats import weibull_max, uniform
import numpy as np
aoas = np.linspace(0, 8, 1000)
speeds = np.linspace(1, 80, 1000)
plt.fill_between(speeds, speeds * 0, weibull_max.pdf(speeds, 2.5, 30), facecolor='k')
plt.ylabel('Probability Density')
plt.savefig('speedDist.pdf')
plt.clf()
当然,我的代码是错误的。文档说 weibull_min
期望 pdf(x, c, loc=0, scale=1)
,其中 x
是分位数,c
是形状因子,scale
是比例因子。但是,当我将代码更改为 weibull_max.pdf(speeds, 2.5, 0, 30)
时,输出 pdf 仅由零值组成。所以,我很困惑。如何生成所需的 Weibull PDF?
你的代码有两个问题。
weibull_min
和weibull_max
不是同一个分布。您在问题的标题和描述中引用了weibull_min
,但在代码中使用了weibull_max
。要匹配您显示的情节,请使用weibull_min
.pdf
方法的参数为(x, shape, loc, scale)
。您编写了pdf(speeds, 2.5, 30)
,它为loc
参数分配了 30。相反,您应该使用pdf(speeds, 2.5, scale=30)
这是您的脚本的一个变体:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import weibull_min
speeds = np.linspace(0, 80, 1000)
p = weibull_min.pdf(speeds, 2.5, scale=30)
plt.plot(speeds, p, 'b', linewidth=1)
plt.fill_between(speeds, speeds * 0, p, facecolor='b', alpha=0.1)
plt.ylabel('Probability Density')
plt.show()
它生成这个图: