Нужен более эффективный код для записи суммы матриц ранга один - PullRequest
0 голосов
/ 02 марта 2020

Моя цель - вычислить матрицу, используя приближения первого ранга, заданные SVD. Например, после вычисления

M=np.array([[3,0],[4,5]])
u, s, vt = np.linalg.svd(M)

я в итоге вычислил M как сумму

s[0]*np.matmul(np.array([[u[0][0]],[u[1][0]]]),np.array([vt[0,:]]))+s[1]*np.matmul(np.array([[u[0][1]],[u[1][1]]]),np.array([vt[1,:]]))

Очевидно, что мне нужна помощь, чтобы сделать это более эффективно. Как мне это почистить?

1 Ответ

0 голосов
/ 02 марта 2020

Прежде всего используйте нарезку вместо доступа к каждому элементу.

Нет необходимости снова использовать np.array (), если нарезка правильная.

s[0]*np.matmul(u[:,0:1],vt[0:1,:])+s[1]*np.matmul(u[:,1:],vt[1:,:])
...