我得到了一些类似于选定的百分位值(第5、10、25、50等),并且需要找出给定值的百分位数是什么。所以,我试过了“胖”和“胖”,但遇到了一个问题。多个百分位数具有相同的值并不少见(例如,从0到第50百分位数)。当我插值时,它总是返回最高值,这会给我的大容量统计数据带来一个倾斜。下面我有一个简单的例子。X是百分位数,Y是对应的百分位数。0.0是我要插值的值。似乎插值函数和方法是相当有限的,因为我有重复的x值。
x=[0.0,0.0,0.0,0.0,0.05,0.2,0.5]
y=[5,10,25,50,75,90,95]
interp = interp1d(x, y, kind='slinear', fill_value='extrapolate')
z2 = np.interp(0.0, x, y, left=0, right=100).round(1)
z = interp(0.0)
print(z)
print(z2)在这种情况下,z和z2都返回50.0,当我期望/要0.0或5.0时(取决于外推法)。是否有任何强制这些返回最小可能值,中间可能值,或任何其他方式来实现这一点?
发布于 2022-05-04 03:10:07
np.interp()和scipy.interpolate.interp1d()都要求x值必须严格增加(即x[i+1] > x[i]),如果不是,则可能返回无稽之谈。如果您想要某种特定的行为,则需要对数据进行预处理,以消除任何重复的x值。例如:
# assuming x and y are already sorted
x_fixed, indices = np.unique(x, return_index=True)
y_fixed = [np.min(vals) for vals in np.split(y, indices[1:])]https://stackoverflow.com/questions/72107274
复制相似问题