我正在研究大型R(v3.6.0)代码库,并试图了解它在做什么。为此,我使用Numpy(v1.14.3)将一些R代码转换为Python(v3.6.5)。我有一段看起来不错的R代码:
> v<-c(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)
[,] -2
Python等效项不很好:
>>> import numpy as np
>>> v=np.ones(4)
>>> v
array([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
,{{ 1}}和dorgqr
。显然,R对一维矩阵感到满意,而Numpy则不满意。
问题
如何使用Numpy复制R的QR因式分解?