Python Scipy插值仅允许线性插值,否则会引发错误

Python Scipy插值仅允许线性插值,否则会引发错误,python,scipy,interpolation,Python,Scipy,Interpolation,我正在尝试使用scipy.interpolate.interp1d 使用线性插值似乎效果不错,但如果我尝试使用二次或三次插值,则会产生以下错误: ValueError:x应该是一维排序数组。\u类似于。 以下是我的代码的简化版本: from __future__ import division import numpy as np import matplotlib.pyplot as plt from scipy import interpolate x = data2[:,0] y = d

我正在尝试使用
scipy.interpolate.interp1d

使用线性插值似乎效果不错,但如果我尝试使用二次或三次插值,则会产生以下错误:

ValueError:x应该是一维排序数组。\u类似于。

以下是我的代码的简化版本:

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate

x = data2[:,0]
y = data2[:,1]
xnew = data3[:,0]
f = interpolate.interp1d(x, y, kind='linear')  #This works for kind='linear', but not 'quadratic' or 'cubic'
ynew = f(xnew) 
x和y看起来像这样:

print x
>>> [55113. 55120. 55123. 55126. 55171. 55213. 55231. 55234. 55436. 55446.
 55474. 55475. 55480. 55497. 55505. 55508. 55514. 55556. 55568. 55570.
 55574. 55600. 55603. 55605. 55611. 55614. 55800. 55823. 55834. 55840.
...
58528. 58541. 58547. 58554. 58701. 58721. 58737. 58748. 58759. 58768.]

#=================

print y
>>> [0.01908541 0.01971167 0.0194646  0.01874254 0.01864027 0.01960122
 0.01862151 0.01850946 0.02040462 0.01998174 0.02093472 0.02075255
 0.02041515 0.02126069 0.02201405 0.02160587 0.02218664 0.0213718
...
0.01937561 0.01975203 0.01989411 0.01958265 0.0200566  0.01976214]
然后xnew是一个以整数间隔在min(x)和max(x)之间的linspace,即

print xnew
>>> [55113. 55114. 55115. ... 58765. 58766. 58767.]
最后,关于输入数据的一些附加信息:

print type(x)
print type(y)
print type(xnew)
print x.shape
print y.shape
print xnew.shape
>>> <type 'numpy.ndarray'>
>>> <type 'numpy.ndarray'>
>>> <type 'numpy.ndarray'>
>>> (970,)
>>> (970,)
>>> (3655,)
打印类型(x)
打印类型(y)
打印类型(新)
打印x.shape
打印y形
打印xnew.shape
>>> 
>>> 
>>> 
>>> (970,)
>>> (970,)
>>> (3655,)
基本上我不理解这个错误-x是一个排序的一维数组,所以我看不出问题所在

以下是用于可视化目的的原始光照曲线和线性插值光照曲线:


提前感谢您的帮助

你介意试着在interp1d中用
np.linspace(np.amin(x),np.amax(x),x.size)
代替x吗?嘿,谢谢你的建议。但是这样做是没有意义的,因为这完全改变了光照曲线的形状-存在需要保持在那里的间隙,并且执行
np.linspace
覆盖了所有的自然间隙。它确实允许我用你的方法做三次插值,但我需要能够在没有完全连续的x轴的情况下完成。下面是一个它看起来像什么的图表-蓝色是原始的,橙色是新的[如果执行
print(np.amin(x[1:]-x[:-1]),会得到什么结果]
?我认为三次插值必须严格大于0才能起作用。有趣的是,这给了我精确的0。这意味着什么?可以做些什么来克服它?这意味着在x上至少有两个相同的连续点。这就是三次插值失败的原因。