Мне было интересно, есть ли в Лапаке функция для ортонормирования столбцов очень высокой и тонкой матрицы. Похожий предыдущий вопрос задавал этот вопрос, предположительно, в контексте квадратной матрицы. Мои настройки таковы: у меня есть матрица M на N, столбцы которой я пытаюсь ортонормировать.
Итак, моей первой мыслью было сделать qr-разложение. Функции для выполнения qr-разложения в Лапаке, кажется, dgeqrf и dormqr. Отлично. Однако моя проблема заключается в следующем: моя матрица A настолько велика, что я не хочу на самом деле вычислять все Q, потому что это M на M. Фактически, я не могу позволить себе создать экземпляр матрицы M на M вообще ни при каких моих вычислениях (в памяти бы не поместилось). Я бы предпочел вычислить только матрицу, которую Википедия называет Q1. Тем не менее, я не могу найти способ сделать эту работу.
Странно то, что я думаю, что это возможно. Numpy, в частности, имеет функцию numpy.linalg.qr, который, кажется, делает именно это. Однако, даже прочитав их исходный код, я не могу понять, как они используют вызовы lapack, чтобы заставить это работать.
Народ есть идеи? Я бы настоятельно предпочел использовать только функции lapack, потому что я надеюсь перенести этот код в CuSOLVE, в котором реализовано несколько функций lapack (включая dgeqrf и dormqr) для графического процессора.