【发布时间】:2020-03-01 23:23:27
【问题描述】:
我正在研究一个大型 R (v3.6.0) 代码库并试图了解它在做什么。为此,我使用 Numpy (v1.14.3) 将一些 R 代码翻译成 Python (v3.6.5)。我有一段看起来运行良好的 R 代码:
> v<-c(1,1,1,1)
> qrout<-qr(v)
> qr.Q(qrout)
[,1]
[1,] -0.5
[2,] -0.5
[3,] -0.5
[4,] -0.5
> qr.R(qrout)
[,1]
[1,] -2
Python 等价物不很好:
>>> import numpy as np
>>> v=np.ones(4)
>>> v
array([1., 1., 1., 1.])
>>> np.linalg.qr(v)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/python/3.6.5/lib/python3.6/site-packages/numpy/linalg/linalg.py", line 753, in qr
_assertRank2(a)
File "/opt/python/3.6.5/lib/python3.6/site-packages/numpy/linalg/linalg.py", line 195, in _assertRank2
'two-dimensional' % a.ndim)
numpy.linalg.linalg.LinAlgError: 1-dimensional array given. Array must be two-dimensional
查看文档,似乎在 R 中使用 LAPACK 的 DQRDC(2)/DGEQP3/ZGEQP3,而 Numpy 使用 LAPACK 的 dgeqrf、zgeqrf、dorgqr 和 zungqr。显然 R 对一维矩阵很满意,而 Numpy 则不然。
问题
如何使用 Numpy 复制 R 的 QR 分解?
【问题讨论】: