我想知道Lapack中是否有一个函数可以对非常高和瘦的矩阵的列进行正交归一化。A similar previous question asked this question, presumably in the context of a square matrix。我的设置如下:我有一个M乘以N的矩阵A,我试图对其列进行正交化。
所以,我的第一个想法是做一个qr分解。在Lapack中进行qr分解的函数似乎是dgeqrf和dormqr。太棒了。然而,我的问题是:我的矩阵A太高了,以至于我不想实际计算所有的Q,因为它是M乘以M。事实上,在我的任何计算过程中,我都负担不起实例化一个M乘M矩阵(它在内存中放不下)。我宁愿只计算wikipedia calls Q1的矩阵。然而,我似乎找不到一种方法来实现这一点。
奇怪的是,我认为这是可能的。特别是Numpy,它有一个函数numpy.linalg.qr似乎就是这样做的。然而,即使在阅读了他们的源代码后,我也不知道他们是如何使用lapack调用来实现这一点的。
大家有什么想法吗?我强烈希望只使用lapack函数,因为我希望将此代码移植到CuSOLVE,它已经为GPU实现了几个lapack函数(包括dgeqrf和dormqr)。
发布于 2016-03-07 19:11:40
你想要“瘦”或“经济型”版本的QR。在matlab中,您可以使用以下命令执行此操作:
[Q,R] = qr(A,0);
我没有直接使用Lapack,但我可以想象那里有一个相应的调用。在python中,您似乎可以使用以下命令来完成此操作:
numpy.linalg.qr(a, mode='reduced')
https://stackoverflow.com/questions/35825278
复制相似问题