ValueError: формы (4,4) и (3,) не выровнены: 4 (dim 1)! = 3 (dim 0) - PullRequest
0 голосов
/ 11 мая 2019
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)
print (np.dot(u, np.dot(np.diag(s), vt)))

Я использую numpy для создания матрицы, и она показывает ошибку скрипта ниже.

ValueError: формы (4,4) и (3,) не выровнены: 4 (dim 1)! = 3 (dim 0)

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Если вы добавите 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)))

Является ли это правильным решением для вашей конкретной проблемы, это другой вопрос.

0 голосов
/ 11 мая 2019

Вы пытаетесь создать скалярное произведение между двумя несовместимыми матрицами.Количество столбцов u (имеет форму (4x4)) не равно количеству строк np.dot(np.diag(s), vt) (имеет форму (3x3))

...