我有从 pdf 图中提取的数据,其中 x 表示孵化时间,y 是 csv 文件中的密度。我想计算百分位数,例如 95%。我有点困惑,我应该只使用 x 值来计算百分位数,即使用 np.precentile(x, 0.95)
?
图中的数据:
最佳答案
这是一些使用 np.trapz 的代码(由@pjs 提出)。我们采用 x 和 y 数组,假设它是 PDF,所以首先我们将其归一化为 1,然后开始向后搜索直到我们达到 0.95 点。
我已经编造了一些多峰函数
import numpy as np
import matplotlib.pyplot as plt
N = 1000
x = np.linspace(0.0, 6.0*np.pi, N)
y = np.sin(x/2.0)/x # construct some multi-peak function
y[0] = y[1]
y = np.abs(y)
plt.plot(x, y, 'r.')
plt.show()
# normalization
norm = np.trapz(y, x)
print(norm)
y = y/norm
print(np.trapz(y, x)) # after normalization
# now compute integral cutting right limit down by one
# with each iteration, stop as soon as we hit 0.95
for k in range(0, N):
if k == 0:
xx = x
yy = y
else:
xx = x[0:-k]
yy = y[0:-k]
v = np.trapz(yy, xx)
print(f"Integral {k} from {xx[0]} to {xx[-1]} is equal to {v}")
if v <= 0.95:
break
关于python - 如果我们将概率密度函数数据作为 x 和 y 计算百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62423375/