python中的线性代数

时间:2016-08-06 02:21:07

标签: python numpy math floating-point linear-algebra

鉴于m by n矩阵X高,我需要计算s = 1 + x(X.T X)^{-1} x.T。这里,x是行向量,s是标量。有没有一种有效的(或推荐的)方法来在python中计算它?

毋庸置疑,X.T X将是对称肯定的。

我的尝试:

如果我们考虑QR的{​​{1}}分解,即X,其中X = QR是正交的,Q是上三角形,那么{{1 }} = R

使用X.T X可以轻松获得

R.T R分解,即

QR

但话又说回来,是否有一种特别有效的方法来计算numpy.linalg.qr

1 个答案:

答案 0 :(得分:1)

如果您要对QR进行X分解,从而得到X.T X = R.T R,则可以通过使用forward和来避免使用np.linalg.inv(和np.linalg.solve)。而是使用scipy.linalg.solve_triangular向后替换(R.T是较低的三角形!):

import numpy as np
import scipy.linalg as LA
Q,R = np.linalg.qr(X)
# solve R.T R z = x such that R z = y 
# with step (a) then (b)
# step (a) solve  R.T y = x
y   = LA.solve_triangular(R,x,trans='T') 
# step (b) solve R z = y
z   = LA.solve_triangular(R,x)
s   = 1 + x @ z

其中@python3矩阵乘法运算符。