ValueError: shapes (4,4) and (3,) not aligned: 4 (dim 1) != 3 (dim 0)
ValueError: shapes (4,4) and (3,) not aligned: 4 (dim 1) != 3 (dim 0)
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: shapes (4,4) and (3,) not aligned: 4 (dim 1) != 3 (dim 0)
您正在尝试在两个不兼容的矩阵之间进行点积。 u
的列数(形状为 (4x4))不等于 np.dot(np.diag(s), vt)
的行数(形状为 (3x3))
如果在 SVD 之后添加 print(u.shape, s.shape, vt.shape)
,您会看到 u
是一个 4x4 矩阵,而 np.dot(np.diag(s), vt)
return 是一个 3x3 矩阵。因此无法计算 u
的点积。将 np.linalg.svd
的 full_matrices
选项设置为 False
将 return 一个 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)))
对于你的具体问题,这是否是正确的做法是另一回事。
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: shapes (4,4) and (3,) not aligned: 4 (dim 1) != 3 (dim 0)
您正在尝试在两个不兼容的矩阵之间进行点积。 u
的列数(形状为 (4x4))不等于 np.dot(np.diag(s), vt)
的行数(形状为 (3x3))
如果在 SVD 之后添加 print(u.shape, s.shape, vt.shape)
,您会看到 u
是一个 4x4 矩阵,而 np.dot(np.diag(s), vt)
return 是一个 3x3 矩阵。因此无法计算 u
的点积。将 np.linalg.svd
的 full_matrices
选项设置为 False
将 return 一个 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)))
对于你的具体问题,这是否是正确的做法是另一回事。