一般化逆行列(擬似逆行列,最小二乗法に対応するやつ)を python で計算するサンプル
特異値分解(SVD)が必要なので,実装は numpy を使います
c++/eigen で実装したコード https://pyopyopyo.hatenablog.com/entry/2021/09/07/090000 のpython版になります
import numpy as np A = np.random.random((3,3)) # SVDを使って,A を U @ S @ Vh の形に分解する U,S,Vh = np.linalg.svd(A) # 検算. U @ np.diag(S) @ Vh は A と一致する assert np.allclose(U@np.diag(S)@Vh, A) # 一般化逆行列を計算する # A = U @ np.diag(S) @ Vh # だから # A+ = Vh.T @ np.diag(1./S) @ U.T # Ainv = Vh.T @ np.diag(1./S) @ U.T # 検算. A と A+ の積 m は単位行列に一致する m = A@Ainv assert np.allclose(m, np.identity(3))