我有2个这样绘制的数组:
elasticsearch - nofile 65536
elasticsearch - nproc 4096
我想找出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
答案 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一样不起作用