0

我想知道 Lapack 中是否有一个函数可以对一个非常高而瘦的矩阵的列进行正交归一化。一个类似的先前问题问了这个问题,大概是在方阵的上下文中。我的设置如下:我有一个 M 乘 N 矩阵 A,我正在尝试对其列进行正交归一化。

所以,我的第一个想法是做一个二维码分解。在 Lapack 中进行 qr 分解的函数似乎是 dgeqrf 和 dormqr。伟大的。但是,我的问题如下:我的矩阵 A 太高了,我不想实际计算所有 Q,因为它是 M × M。事实上,我无法实例化 M × M 矩阵在我的任何计算过程中(它不适合内存)。我宁愿只计算维基百科调用的矩阵 Q1。但是,我似乎无法找到一种方法来完成这项工作。

奇怪的是,我认为这是可能的。特别是 Numpy,有一个函数numpy.linalg.qr似乎就是这样做的。但是,即使在阅读了他们的源代码之后,我也无法弄清楚他们是如何使用 lapack 调用来使其工作的。

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

4

1 回答 1

0

您想要 QR 的“瘦”或“经济尺寸”版本。在 matlab 中,您可以这样做:

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

我没有直接使用 Lapack,但我想那里有相应的调用。看来您可以在 python 中执行此操作:

numpy.linalg.qr(a, mode='reduced')
于 2016-03-07T19:11:40.460 回答