2016-03-06 174 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')