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

时间:2019-12-11 16:22:22

标签: python scipy interpolation

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

在不规则的光曲线中插值

使用线性插值似乎可以正常工作,但是如果尝试使用二次或三次插值,则会出现以下错误:

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

这是我的代码的简化版本:

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)之间的整数间隔的线性空间,即

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是一个排序的一维数组,所以我看不到问题。

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

Raw Lightcurve

Linearly Interpolated Lightcurve

在此先感谢您的帮助!

0 个答案:

没有答案