Как рассчитать разложение A=P[I_r,0;0,0]Q в Python?
Учитывая матрицу A, возможно ли удобно получить обратимые матрицы P и Q, которые появляются в матричной эквивалентности и удовлетворяют A=P[I_r,0;0,0]Q при numpy или scipy?
1 ответ
Возможно, вы можете выполнить разложение по сингулярным числам (SVD), а затем умножить сингулярные значения на одно из унитарных матриц.
См. Определение SVD на http://en.wikipedia.org/wiki/Singular_value_decomposition
в основном вы получите унитарную матрицу, диагональную матрицу и другую унитарную матрицу. Диагональная матрица имеет число ненулевых элементов, равное рангу (A).
В коде Python это
P, S, Q = numpy.linalg.svd(A)
for i, row in enumerate(Q):
row *= S[i]
См. Http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.svd.html о numpy.linalg.svd.
P, Q тогда станет именно тем, что вы хотите. Но имейте в виду, что нет уникального способа такого разложения.