Построение гладких кривых с использованием scipy.interplote.interp1d и matplotlib Python 2.7 32-bit (Enthought Canopy)

Я рассчитал кривую наилучшего соответствия для графика рассеяния и хотел бы представить результаты в виде плавной кривой, похожей на сплайны SAS.

После некоторого поиска в Google было обнаружено, что я должен сначала использовать interpolate.interp1d для своих данных, прежде чем строить линию. Однако я получаю сообщение об ошибке, когда пытаюсь сделать это на основе руководства в документация. Заранее спасибо за любую помощь или ресурсы!

from scipy import interpolate
j = np.arange(0, 29, 1) # new x values
k = (model(xdata, g_fit, a_fit, b_fit)) # y values
l = interpolate.interp1d(j, k)

plt.scatter(xdata, ydata, c='g', marker='x')
plt.plot(xdata, model(xdata, g_fit, a_fit, b_fit), color='red')
plt.plot(j, l(k))
plt.axis([-1, 31, 0.5, 1.2]) # xmin, xmax, ymin, ymax
plt.show()
print p


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-56-0db707080a49> in <module>()
      2 j = np.arange(0, 29, 1)
      3 k = (model(xdata, g_fit, a_fit, b_fit))
----> 4 l = interpolate.interp1d(j, k)
      5 
      6 plt.scatter(xdata, ydata, c='g', marker='x')

C:\Enthought\Canopy32\User\lib\sitepackages\scipy\interpolate\
interpolate.py in __init__
(self, x, y, kind, axis, copy, bounds_error, fill_value)
    331                  copy=True, bounds_error=True, fill_value=np.nan):
    332         """ Initialize a 1D linear interpolation class."""
--> 333         _Interpolator1D.__init__(self, x, y, axis=axis)
    334 
    335         self.copy = copy

C:\Enthought\Canopy32\User\lib\site-packages\scipy\interpolate\
polyint.py in __init__(self, xi, yi, axis)
     33         self.dtype = None
     34         if yi is not None:
---> 35             self._set_yi(yi, xi=xi, axis=axis)
     36 
     37     def __call__(self, x):

C:\Enthought\Canopy32\User\lib\site-packages\scipy\interpolate\
polyint.py in _set_yi(self, yi, xi, axis)
     92             shape = (1,)
     93         if xi is not None and shape[axis] != len(xi):
---> 94             raise ValueError("x and y arrays must be equal in length along "
     95                              "interpolation axis.")
     96 

ValueError: x and y arrays must be equal in length along interpolation axis.

person Jason    schedule 07.01.2014    source источник


Ответы (1)


почему бы вам сначала не проверить формы массивов i и j. Может быть, ваша функция model возвращает массив другого размера?

Я действительно должен оставить комментарий, но у меня достаточно баллов для публикации комментариев ...

person ssm    schedule 07.01.2014
comment
Я думаю, что, возможно, я сделал что-то не так, когда пытался интерполировать.interp1d и np.arange, я не уверен, что должен делать каждый шаг. Для каждого значения y есть одно значение x, это то, о чем вы спрашивали? - person Jason; 07.01.2014
comment
Ошибка ValueError: массивы x и y должны быть равны по длине вдоль оси интерполяции. говорит, что i и j не имеют одинаковой формы. Но у меня были проблемы с этой конкретной функцией для кубической интерполяции. В вашем случае такого быть не должно. - person ssm; 08.01.2014