import numpy as np
import pandas as pd
x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T
print(A)
print(y)
m, c = np.linalg.lstsq(A, y, rcond = -1)[0]
print(m, c)
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()
运行结果如下:
[[0. 1.]
[1. 1.]
[2. 1.]
[3. 1.]]
[-1. 0.2 0.9 2.1]
0.9999999999999999 -0.9499999999999997
我们在使用np.linalg.lstsq前,
会先将x在下与一行“1”矩阵合并,
然后使用的到转置得到的矩阵与y一同带入到np.linalg.lstsq函数中。
而这个预先处理的过程,事实上是为了迎合np处理矩阵的属性
等效于:
相当于后添加的1矩阵起到了工具人的作用,引入了C