一、np.linalg.lstsq是什麼
np.linalg.lstsq是NumPy中的線性代數函數,它被用於解決矩陣方程,可在最小二乘意義上重建一組觀察數據。
具體來說,np.linalg.lstsq的作用是,求解一個形如Ax = b的線性系統,其中A為一個m×n的線性矩陣,b為一個包含m個獨立變量的向量,x為一個包含n個未知變量的向量,通過求解x的值,滿足方程組。同時,如果方程組沒有精確的解,它可以通過最小二乘調整返回最優解。
二、np.linalg.lstsq的輸入和輸出
輸入:
numpy.linalg.lstsq(a, b, rcond='warn')
輸出為4個值:
x: 係數向量 residuals: 殘差 rank: 矩陣A的秩 s: 奇異值
三、示例
1、求解線性方程組
通過一個簡單的例子來說明如何使用np.linalg.lstsq函數求解線性方程組。
import numpy as np # 創建4x3的係數矩陣A和4x1的矩陣b A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10], [13, 14, 15]]) b = np.array([[1], [2], [3], [4]]) # 求解方程組 x, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None) print("係數向量為:\n", x) print("殘差為:\n", residuals) print("矩陣A的秩為:\n", rank) print("奇異值為:\n", s)
運行結果如下:
係數向量為: [[-0.06896552] [-0.34482759] [ 0.54597701]] 殘差為: [6.25171072] 矩陣A的秩為: 3 奇異值為: [2.13261383e+01 1.65604864e+00 3.83414488e-16]
我們可以看到,通過np.linalg.lstsq可以很容易地求出線性方程組的係數向量、殘差、矩陣A的秩和奇異值。
2、使用最小二乘逼近函數擬合數據
下面我們來看看如何使用np.linalg.lstsq函數來擬合一組離散數據,以實現最小二乘逼近的效果。
首先,我們通過numpy生成一組離散數據,這裡我們使用x軸坐標在[0, 1]範圍內的50個點,對應y軸坐標通過sin函數計算得出。
import numpy as np import matplotlib.pyplot as plt # 生成離散數據 x = np.linspace(0, 1, 50) y = np.sin(2 * np.pi * x) # 打印離散數據的圖像 plt.plot(x, y, 'o', label='Discrete data') plt.legend() plt.show()
運行結果如下:

得到離散數據後,我們通過np.linalg.lstsq函數進行最小二乘逼近的擬合。
# 將x轉換成3x50矩陣,並填充一列1作為截距項 X = np.vstack([x, np.ones(len(x))]).T # 擬合數據 coeff, residuals, _, _ = np.linalg.lstsq(X, y) # 打印擬合後的數據圖像 plt.plot(x, y, 'o', label='Discrete data') plt.plot(x, coeff[0] * x + coeff[1], '-r', label='Fitted line') plt.legend() plt.show()
運行結果如下:

我們可以看到,通過np.linalg.lstsq函數的最小二乘逼近擬合,我們得到了一條紅色的擬合直線,能夠很好地逼近離散數據的變化趨勢。
四、總結
np.linalg.lstsq是NumPy中的線性代數函數,被用於解決矩陣方程,可以在最小二乘意義上重建一組觀察數據。它的輸入為一個m×n的線性矩陣A和一個包含m個獨立變量的向量b,輸出為一個包含n個未知變量的向量x、殘差residuals、矩陣A的秩rank和奇異值s。通過上述的示例可以看出,np.linalg.lstsq函數非常方便易用,可以很容易地求解線性方程組,同時還可以用於最小二乘逼近等應用場景。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/153800.html