-1
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)

4

2 回答 2

0

您正在尝试在两个不兼容的矩阵之间进行点积。(它的形状为(4x4))的列u数不等于np.dot(np.diag(s), vt)(它的形状为(3x3))的行数

于 2019-05-11T12:44:03.210 回答
0

如果print(u.shape, s.shape, vt.shape)在 SVD 之后添加,您会看到这u是一个 4x4 矩阵,而np.dot(np.diag(s), vt)返回一个 3x3 矩阵。u因此,为什么无法计算点积。设置tofull_matrices选项将返回一个 4x3 矩阵,并允许计算点积。IEnp.linalg.svdFalse

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)))

对于您的具体问题,这是否是正确的做法是另一回事。

于 2019-05-11T12:47:24.370 回答