Python Scipy.linalg.qr_更新不';行不通
无法了解scipy.linalg.qr_更新无法正常工作的原因。 来自scipy文档: qr\u更新(Q、R、u、v、覆盖\u qruv=False,检查\u finite=True) 如果A=QR是A的QR分解,则返回QR分解 A+uvˆT对于实A,或A+uvˆH对于复A 但它不起作用!以下是一个例子:Python Scipy.linalg.qr_更新不';行不通,python,scipy,Python,Scipy,无法了解scipy.linalg.qr_更新无法正常工作的原因。 来自scipy文档: qr\u更新(Q、R、u、v、覆盖\u qruv=False,检查\u finite=True) 如果A=QR是A的QR分解,则返回QR分解 A+uvˆT对于实A,或A+uvˆH对于复A 但它不起作用!以下是一个例子: import numpy as np from numpy.linalg import * N = 3 coef = 0.5 Q = np.eye(N) R = coef * np.eye
import numpy as np
from numpy.linalg import *
N = 3
coef = 0.5
Q = np.eye(N)
R = coef * np.eye(N)
u = np.matrix([[ 1.92981364, 0.2505024, 1.25051418]])
print "What should be:"
print Q*R + u.T * u
q1, r1 = qr_update(Q, R, u.T, u.T)
print "What we have:"
print q1 * r1
输出:
What should be:
[[ 4.22418069 0.48342295 2.41325932]
[ 0.48342295 0.56275145 0.3132568 ]
[ 2.41325932 0.3132568 2.06378571]]
What we have:
[[ 4.22418069e+00 -7.36996838e-02 -1.53468755e+00]
[ 0.00000000e+00 5.00656362e-01 -2.62290295e-03]
[ 0.00000000e+00 0.00000000e+00 5.16088504e-01]]
如果你能给我任何帮助,我将不胜感激 小心不要将
*
与矩阵乘法/点积混淆。对于普通的numpy数组,*
是按元素排列的。所以np.dot(A,B)
和A*B
通常是不一样的!你完全正确-谢谢!打印np.矩阵(q1)*np.矩阵(r1)-给出正确答案