Восстановление матрицы из SVD в python 3 - PullRequest
0 голосов
/ 26 января 2020

Привет, поэтому мой вопрос в основном таков: у меня есть матрица, которую я разложил в SVD, и она содержит переменные u, s и v. Я сделал некоторые изменения в матрице s, чтобы сделать ее диагональной, а также изменил некоторые цифры. Сейчас я в основном пытаюсь восстановить его в регулярную матрицу из 3 матриц обратно в исходную матрицу. Кто-нибудь знает какие-либо функции, которые делают это? Я не могу найти какие-либо примеры этого в numpy.

Ответы [ 2 ]

1 голос
/ 26 января 2020

Единственный немного хитрый бит - это «расширение» s Если у вас установлено scipy, у него есть scipy.linalg.diagsvd, который может сделать это для вас:

>>> import numpy as np
>>> import scipy.linalg as la
>>> 
>>> rng = np.random.default_rng()
>>> A = rng.uniform(-1,1,(4,3))
>>> u,s,v = np.linalg.svd(A)
>>> 
>>> B = u@la.diagsvd(s,*A.shape)@v
>>> 
>>> np.allclose(A,B)
True
0 голосов
/ 28 января 2020

Я понял это, просто используя функцию np.matmul (), а затем просто умножив 3 матрицы нас и v, было достаточно, чтобы вернуть их в исходную матрицу.

...