【发布时间】:2021-11-24 03:50:44
【问题描述】:
我需要在 Python 中使用单值分解来反转以下矩阵,并且我需要将这些矩阵相乘以获得初始矩阵以进行确认。当矩阵有不同的维度时,我该怎么做?
X_b= [[array([2.52390408]), array([2.4962137]), array([2.46467486]), array([2.48760957])], [array([2.52390408]), array([2.4962137]), array([2.46467486]), array([2.48760957])]]
我使用了命令
svd=linalg.svd(x_b, full_matrices=True, compute_uv=True, hermitian=False)
结果是
a=svd[0]
a =[[ 0.50615947 -0.50060626 -0.49428127 -0.49888074]
[ 0.50060626 0.83361215 -0.16428559 -0.16581433]
[ 0.49428127 -0.16428559 0.8377901 -0.16371932]
[ 0.49888074 -0.16581433 -0.16371932 0.83475721]]]
b=svd[1]
b= [[4.98638127]
[4.98638127]]
c=svd[2]
c= [[[1.]]
[[1.]]]
我对示例应用相同的方法
R = [[190.93095651 189.30517758] [187.01785506 185.38861727] [183.29225361 181.47205695]]
u, s, vh = np.linalg.svd(R, full_matrices=True)
当我尝试使用 print((u * s) @ vh) 重建它时,我得到了错误
" operands could not be broadcast together with shapes (3,3) (2,)"
【问题讨论】:
-
除非您提供有关如何为每个操作数执行填充的确切指南,否则这没有多大意义。还有什么是期望的输出?
-
矩阵代数中的规则不是需要一维彼此相等吗?矩阵 1 和 2 的尺寸分别为 2x3 和 3X5。两者的 1 维都是 3,因此输出矩阵是 2x5。您的矩阵是 4x4 和 1x2。我不明白矩阵 C 有什么。基本上我是说你不能将这些矩阵相乘,因为它们的维度。
-
@CliffordPiehl - 问题是如何添加零 [...] 来执行乘法。
-
@Ivan 我编辑了帖子,请您检查一下
-
@CliffordPiehl 我编辑了帖子,请您检查一下
标签: python numpy numpy-ndarray