# fitting data with numpy

Unfortunately, `np.polynomial.polynomial.polyfit` returns the coefficients in the opposite order of that for `np.polyfit` and `np.polyval` (or, as you used `np.poly1d`). To illustrate:

``````In [40]: np.polynomial.polynomial.polyfit(x, y, 4)
Out[40]:
array([  84.29340848, -100.53595376,   44.83281408,   -8.85931101,
0.65459882])

In [41]: np.polyfit(x, y, 4)
Out[41]:
array([   0.65459882,   -8.859311  ,   44.83281407, -100.53595375,
84.29340846])
``````

In general: `np.polynomial.polynomial.polyfit` returns coefficients `[A, B, C]` to `A + Bx + Cx^2 + ...`, while `np.polyfit` returns: `... + Ax^2 + Bx + C`.

So if you want to use this combination of functions, you must reverse the order of coefficients, as in:

``````ffit = np.polyval(coefs[::-1], x_new)
``````

However, the documentation states clearly to avoid `np.polyfit`, `np.polyval`, and `np.poly1d`, and instead to use only the new(er) package.

You’re safest to use only the polynomial package:

``````import numpy.polynomial.polynomial as poly

coefs = poly.polyfit(x, y, 4)
ffit = poly.polyval(x_new, coefs)
plt.plot(x_new, ffit)
``````

Or, to create the polynomial function:

``````ffit = poly.Polynomial(coefs)    # instead of np.poly1d
plt.plot(x_new, ffit(x_new))
``````