Предположим, у вас есть NxM
матрица A
полного ранга, где M>N
. Если мы обозначим столбцы C_i
(с размерами Nx1
), то мы можем записать матрицу как
A = [C_1, C_2, ..., C_M]
Как получить первые линейно независимые столбцы исходной матрицы A
, чтобы можно было построить новую NxN
матрицу B
, которая является обратимой матрицей с ненулевым определителем.
B = [C_i1, C_i2, ..., C_iN]
Как найти индексы {i1, i2, ..., iN}
в matlab или python numpy? Можно ли это сделать с помощью разложения по сингулярным числам? Фрагменты кода будут очень кстати.
EDIT:
Чтобы сделать это более конкретным, рассмотрим следующий код Python
from numpy import *
from numpy.linalg.linalg import det
M = [[3, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 1],
[0, 2, 0, 0, 0]]
M = array(M)
I = [0,1,2,4]
assert(abs(det(M[:,I])) > 1e-8)
Таким образом, с учетом матрицы M нужно было бы найти индексы для набора N
линейно независимых векторов столбцов.