Сглаживание кривой в PyPlot с большими значениями Y

1

Я следую советам, данным в этом вопросе, для следующих данных:

import matplotlib.pyplot as plt
from numpy import array, linspace
from scipy.interpolate import spline

xdata = array([25, 36, 49])
ydata = array([145247, 363726, 789055])

xnew = linspace(xdata.min(),xdata.max(),300)

ysmooth = spline(xdata,ydata,xnew)

plt.plot(xnew,ysmooth)
plt.show()

Хотя он отлично работает для данных в этом вопросе, по некоторым причинам, с этими данными, он ломается:

Traceback (most recent call last):
  File "test.py", line 526, in <module>
    ysmooth = spline(xdata,ydata,xnew)
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 809, in spline
    return spleval(splmake(xk,yk,order=order,kind=kind,conds=conds),xnew)
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 771, in splmake
    coefs = func(xk, yk, order, conds, B)
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 500, in _find_smoothest
    p = np.dual.solve(Q,tmp)
  File "/Library/Frameworks/Python.framework/Versions/7.1/lib/python2.7/site-packages/scipy/linalg/basic.py", line 70, in solve
    raise LinAlgError("singular matrix")
numpy.linalg.linalg.LinAlgError: singular matrix

Как это исправить? Это похоже на действительно легкие данные для соответствия алгоритма.

Теги:
matplotlib
scipy

1 ответ

2
Лучший ответ

Какие версии numpy и scipy вы используете? Ваш код работает для меня с numpy 1.6.0 и scipy 0.9.0 (после перемещения импорта linspace в numpy из scipy.interpolate) после добавления диаграммы рассеяния:

Изображение 174551

  • 0
    Интересно. Я использую последнюю версию Enthought на Mac.
  • 0
    Полагаю, в этом случае мне просто нужно обойтись. Я потратил слишком много времени на то, чтобы этот график выглядел правильно.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню