另一种写方程的方法是
X*M = Y
哪里
X
是(n_obs,4)输入矩阵,
M
是(4,4)个未知矩阵
Y
是(n ou obs,4)观测值。
然后
numpy.linalg.lstsq
可以使用:
import numpy as np
from scipy.optimize import least_squares
n_observations = 100
np.random.seed(seed=1234)
X = np.random.random((n_observations, 4))
M = np.random.random((4, 4))
Y = np.einsum('ni,ij->nj', X, M)
M_fit, residuals, rank, s = np.linalg.lstsq(X, Y, rcond=None)
print(M)
#[[0.71499388 0.72409148 0.01867644 0.2858131 ]
# [0.58048634 0.93078663 0.3389969 0.12008312]
# [0.51627271 0.69920706 0.29864068 0.86160962]
# [0.9058072 0.76858325 0.26123164 0.9384556 ]]
print(M_fit)
#[[0.71499388 0.72409148 0.01867644 0.2858131 ]
# [0.58048634 0.93078663 0.3389969 0.12008312]
# [0.51627271 0.69920706 0.29864068 0.86160962]
# [0.9058072 0.76858325 0.26123164 0.9384556 ]]
通过写方程的转置,即
M' * X' = Y'
,可以检索您的符号。