2016-03-06 81 views
0

我想知道在Lapack中是否有一个函数用于对一个非常高且紧密矩阵的列进行正交归一化。 A similar previous question asked this question, presumably in the context of a square matrix。我的设置如下:我有一个M×N的矩阵A,我正在尝试对列进行正交归一化。矩形矩阵的Lapack Orthonormalization函数

所以,我的第一个想法是做一个QR分解。在Lapack中进行qr分解的函数似乎是dgeqrf和dormqr。大。但是,我的问题如下:我的矩阵A很高,我不想实际计算所有的Q,因为它是M乘以M。事实上,我不能实例化M乘M矩阵在我的任何计算过程中(它不适合在内存中)。我宁愿计算01​​的矩阵。但是,我似乎无法找到一种方法来完成这项工作。

奇怪的是,我认为这是可能的。尤其是,Numpy有一个功能numpy.linalg.qr,看起来就是这样做的。但是,即使在阅读源代码之后,我也无法弄清楚他们是如何使用lapack调用来实现这个功能的。

人们有想法吗?我强烈希望只使用lapack函数,因为我希望将这些代码移植到CuSOLVE,它已经为GPU实现了几个lapack函数(包括dgeqrf和dormqr)。

回答

0

你想要QR的“瘦”或“经济规模”版本。在matlab中,你可以这样做:

[Q,R] = qr(A,0); 

我没有直接使用Lapack,但我会想象那里有一个相应的调用。看来,你可以用python做到这一点:

numpy.linalg.qr(a, mode='reduced')