numpy linalg.solve,不是方阵

时间:2019-01-06 16:41:26

标签: python numpy

所以目前我正在使用类似如下的代码

Q,R = np.linalg.qr(matrix)
Qb = np.dot(Q.T, new_mu[b][n])
x_qr = np.linalg.solve(R, Qb)
mu.append(x_qr)

只要我的矩阵是正方形,代码就可以正常工作,但是一旦不行,系统就无法解决,并且我得到了错误。如果我理解正确的话,我不能在非满秩矩阵上使用linalg.solve,但是有没有办法我可以不使用lstsquare解决方案来克服这一障碍呢?

1 个答案:

答案 0 :(得分:2)

否,这是不可能的,例如specified in the np.linalg.solve docs

问题在于,给定Ax = b时,如果A不是正方形,则假设A中的所有行都是线性独立的,则方程式是超定的还是超定的。这意味着不存在单个x可以解决该方程。

直觉上,想法是,如果您要尝试求解n(长度为x)个变量,则需要精确的n方程式来找到唯一的解对于x,假定这些方程式不是“冗余的”。在这种情况下,“冗余”表示线性相关:一个方程式等于​​另一个方程式中一个或多个的线性组合。

在这种情况下,可能要做的一件事是找到使x最小的norm(b - Ax)^2(即linear least squares解决方案):

x, _, _, _ = np.linalg.lsq(A, b)