2016-03-06 4 views
0

Мне было интересно, была ли функция в Lapack для ортонормирования столбцов очень высокой и тощей матрицы. A similar previous question asked this question, presumably in the context of a square matrix. Моя настройка такова: у меня есть матрица M по N, которую я пытаюсь ортонормировать столбцы.Функция ортонормирования лапака для прямоугольной матрицы

Итак, моя первая мысль заключалась в том, чтобы сделать разложение qr. Функции для выполнения qr-декомпозиции в Lapack выглядят как dgeqrf и dormqr. Отлично. Тем не менее, моя проблема заключается в следующем: моя матрица A настолько высока, что я не хочу фактически вычислять все Q, потому что это M по M. На самом деле я не могу позволить создать экземпляр матрицы M по M во время любого из моих вычислений (это не поместилось бы в память). Я бы скорее вычислил только матрицу, которая wikipedia calls Q1. Однако я не могу найти способ сделать эту работу.

Странно, что я думаю, что это возможно. У Numpy, в частности, есть функция numpy.linalg.qr, которая, как представляется, делает именно это. Однако даже после прочтения их исходного кода я не могу понять, как они используют вызовы lapack, чтобы заставить это работать.

Есть ли у людей идеи? Я бы предпочел, чтобы это использовало только функции lapack, потому что я надеюсь перенести этот код на CuSOLVE, который реализовал несколько функций lapack (включая dgeqrf и dormqr) для графического процессора.

ответ

0

Вы хотите версию «тонкого» или «экономного размера» QR. В MATLAB, вы можете сделать это с помощью:

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

я не использовал LaPack непосредственно, но я предположил бы, что есть соответствующий вызов там. Похоже, вы можете сделать это в python с:

numpy.linalg.qr(a, mode='reduced') 
Смежные вопросы