我正在尝试使用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是一个排序的一维数组,所以我看不到问题。
以下是用于可视化目的的原始线性插值光曲线:
Linearly Interpolated Lightcurve
在此先感谢您的帮助!