2016-11-02 4 views
0

Я немного в тупике. Я использовал сплайн, чтобы сгладить мои данные успешно, однако на этот раз он просто не работает. Вот фрагмент кода, который не работает. Любые указатели будут высоко оценены.scipy.interpolate.spline не работает должным образом

In [46]: x 

Out[46]: 
array([ 600., 650., 700., 750., 800., 850., 900., 950., 
     1000., 1050., 1100., 1150., 1200., 1250.]) 

In [47]: y 

Out[47]: 
array([ 2.68530481, 3.715443 , 4.11270841, 2.91720571, 1.49194971, 
     0.24770035, -0.64713611, -1.40938122, -2.24634466, -3.04577225, 
     -3.73914759, -4.35097303, -4.94702689, -5.56523414]) 

In [48]: x2=numpy.linspace(x.min(),x.max(),20) 

In [49]: spline(x,y,x2) 

Out[49]: 
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 
     0., 0., 0., 0., 0., 0., 0.]) 
+0

Проверьте этот SO вопрос актуален: [гладкая линия с рейкой и datetime не работает] (http://stackoverflow.com/questions/38686415/smooth-line-with-spline-and-datetime-objects-doesnt-work/38687139#38687139) –

ответ

0

enter image description here

Попробуйте использовать interp1d вместо spline which is deprecated(*):

import numpy as np 
from matplotlib import pyplot as plt 
from scipy.interpolate import interp1d 

plt.ion() 
x = np.array([600., 650., 700., 750., 800., 850., 900., 950., 
       1000., 1050., 1100., 1150., 1200., 1250.]) 
y = np.array([2.68530481, 3.715443, 4.11270841, 2.91720571, 1.49194971, 
       0.24770035, -0.64713611, -1.40938122, -2.24634466, 
       -3.04577225, -3.73914759, -4.35097303, -4.94702689, 
       -5.56523414]) 
plt.plot(x,y) 
x2 = np.linspace(x.min(), x.max(), 20) 
f = interp1d(x, y, kind='cubic') 
y2 = f(x2) 
plt.plot(x2,y2) 

Выход

In [20]: x2 
Out[20]: 
array([ 600.  , 634.21052632, 668.42105263, 702.63157895, 
     736.84210526, 771.05263158, 805.26315789, 839.47368421, 
     873.68421053, 907.89473684, 942.10526316, 976.31578947, 
     1010.52631579, 1044.73684211, 1078.94736842, 1113.15789474, 
     1147.36842105, 1181.57894737, 1215.78947368, 1250.  ]) 

In [21]: y2 
Out[21]: 
array([ 2.68530481, 3.35699957, 4.03277746, 4.08420565, 3.31233485, 
     2.29896296, 1.34965136, 0.48288214, -0.21322503, -0.76839036, 
     -1.28566315, -1.84433723, -2.42194321, -2.96633554, -3.45993064, 
     -3.90553288, -4.31968149, -4.7262301 , -5.13883472, -5.56523414]) 

(*) В соответствии с дополнительными инструментами, SciPy списков spline как:

Функции существующей для обратной совместимости (не следует использовать в новом коде):

+0

Большое спасибо. Я также выяснил, что я получил свои x и y в виде разреза из массива 2d, и форма могла бы сыграть трюк со мной. Когда я изменил x = numpy.array (x) и y = numpy.array (y), он сработал. Но я перейду к интерпретации. Спасибо что подметил это. –

+0

@ A.V. мой ответ помог вам вообще? Не быть мелким, но если это так, можете ли вы выбрать его как правильный ответ. В противном случае, неважно. Рад помочь. –

Смежные вопросы