即使值单调增加,为什么也不能插值?

时间:2018-11-21 16:58:52

标签: python scipy interpolation

我有2个这样绘制的数组:

elasticsearch  -  nofile  65536
elasticsearch  -  nproc  4096

enter image description here

我想找出plt.plot(x1, x2) x2的值是什么。由于所有值可能都不存在,因此我使用以下方法进行插值:

x1=2,5,75,10,100, and 1000

但是from scipy.interpolate import interp1d f1=interp1d(x1, x2) f2=interp1d(x1, x2, kind='cubic') 抛出此错误:

f2

但是,这些值正按以下期望值单调递增:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html

我在做什么错了?

ValueError: Expect x to be a 1-D sorted array_like.

x1

array([1.00020004e+00, 1.00020004e+00, 1.00080064e+00, 1.00200401e+00, 1.00341160e+00, 1.00603622e+00, 1.01173614e+00, 1.02165917e+00, 1.02965404e+00, 1.04362346e+00, 1.05820106e+00, 1.07688994e+00, 1.10107906e+00, 1.12688754e+00, 1.16063138e+00, 1.19161106e+00, 1.23578843e+00, 1.29198966e+00, 1.35062129e+00, 1.42775557e+00, 1.52207002e+00, 1.63345312e+00, 1.77746178e+00, 1.93124759e+00, 2.11954218e+00, 2.37191651e+00, 2.68528464e+00, 2.97973778e+00, 3.38983051e+00, 3.89105058e+00, 4.48430493e+00, 5.31349628e+00, 6.28930818e+00, 7.59878419e+00, 9.38086304e+00, 1.20192308e+01, 1.57232704e+01, 2.06611570e+01, 2.68817204e+01, 3.49650350e+01, 4.58715596e+01, 6.57894737e+01, 8.92857143e+01, 1.38888889e+02, 2.27272727e+02, 4.16666667e+02, 1.00000000e+03, 2.50000000e+03, 2.50000000e+03, 5.00000000e+03])

x2

2 个答案:

答案 0 :(得分:1)

正在执行的测试是:

np.any(x1[1:] <= x1[:-1])

请注意<=,这意味着数组中的相等值(例如:2.50000000e + 03、2.50000000e + 03)会导致错误。

更改这些和(在数组的开头再添加两个)将使错误消失。

不是肯定这是处理数据的正确方法,但是您可以使用以下方法删除重复项(以及相应的x2值):

x3, ind = np.unique(x1, return_index = True)
x4 = x2[ind] 
f2=interp1d(x3, x4, kind='cubic')

答案 1 :(得分:0)

只需在进行插值之前添加以下两行:

x1[0] -= 0.0000001
x1[-2] += 0.0000001 

像epsilon一样不起作用