# Fit a line, ``y = mx + c``, through some noisy data-points: x = np.array([0, 1, 2, 3]) y = np.array([-1, 0.2, 0.9, 2.1]) # By examining the coefficients, we see that the line should have a # gradient of roughly 1 and cut the y-axis at, more or less, -1. # We can rewrite the line equation as ``y = Ap``, where ``A = [[x 1]]`` # and ``p = [[m], [c]]``. Now use `lstsq` to solve for `p`: A = np.vstack([x, np.ones(len(x))]).T A # array([[ 0., 1.], # [ 1., 1.], # [ 2., 1.], # [ 3., 1.]]) m, c = np.linalg.lstsq(A, y)[0] print m, c # 1.0 -0.95 # Plot the data along with the fitted line: import matplotlib.pyplot as plt plt.plot(x, y, 'o', label='Original data', markersize=10) plt.plot(x, m*x + c, 'r', label='Fitted line') plt.legend() plt.show()