Если вы добавите print(u.shape, s.shape, vt.shape)
после SVD, вы увидите, что u
- это матрица 4x4, тогда как np.dot(np.diag(s), vt)
возвращает матрицу 3x3.Следовательно, точечное произведение с u
не может быть вычислено.Установка параметра full_matrices
для np.linalg.svd
в False
вернет матрицу 4x3 и позволит вычислить скалярное произведение.Т.е.
import numpy as np
A = np.matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]])
u, s, vt = np.linalg.svd(A, full_matrices=False)
print(np.dot(u, np.dot(np.diag(s), vt)))
Является ли это правильным решением для вашей конкретной проблемы, это другой вопрос.