python - scipy:如何使用 weibull_min.pdf?
问题描述
我发现scipy
's 的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
expects是分位数,pdf(x, c, loc=0, scale=1)
是形状因子,是比例因子。但是,当我将代码更改为 时,输出 pdf 仅由零值组成。所以,我很困惑。如何生成所需的 Weibull PDF?x
c
scale
weibull_max.pdf(speeds, 2.5, 0, 30)
解决方案
您的代码中有两个问题。
weibull_min
并且weibull_max
分布不一样。您weibull_min
在问题的标题和描述中引用,但您weibull_max
在代码中使用。要匹配您显示的图,请使用weibull_min
.该
pdf
方法的参数是(x, shape, loc, scale)
。你写了pdf(speeds, 2.5, 30)
30 给loc
参数。相反,您应该使用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()
它生成这个图:
推荐阅读
- ajax - Nginx PHP API CORS
- android - 用相机拍照后如何禁用进度条?
- typescript - TypeScript 从同步函数调用异步函数并返回布尔值
- java - JPA / Hibernate:使用输入和输出参数调用存储过程
- angular - @input 类型字符串属性,用于双向数据绑定
- mysql - 带有内部连接和 where 子句的 Max(date)
- geo - 确定地址是否在纽约三州地区的最佳方法
- python-3.x - 在保留所有数据的同时按 ID 分组。Python。熊猫
- spring-boot - 与 AWS S3 的弹簧集成重试失败的“获取”文件
- git - 管理 2 个 git 用户 gpg 密钥并为每个用户选择 gpg 签名