首页 > 解决方案 > numpy 在计算向量和矩阵乘法时的奇怪行为

问题描述

我有以下奇怪的行为,numpy其中 numpy 不能将(n,n)矩阵与(n,)矩阵相乘并将后者转换为(1,n)矩阵。我尝试了不同的例子,效果很好。ussvd函数中获得如下:

 [u, s, vt] = np.linalg.svd(G)
 svd_estimate = np.matmul(u * s, vt)

并且G是一个numpy矩阵。我尝试过,squeeze(s)但也没有用。我错过了什么?numpy 版本是'1.19.2'

在此处输入图像描述

标签: pythonnumpy

解决方案


看看a vssvd产生了什么:matrixarray

In [24]: np.linalg.svd(np.matrix(np.eye(3)))
Out[24]: 
(matrix([[1., 0., 0.],
         [0., 1., 0.],
         [0., 0., 1.]]),
 array([1., 1., 1.]),
 matrix([[1., 0., 0.],
         [0., 1., 0.],
         [0., 0., 1.]]))
In [25]: np.linalg.svd(np.eye(3))
Out[25]: 
(array([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]]),
 array([1., 1., 1.]),
 array([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]]))

使用数组值,如文档中所示:

In [27]: u,s,vh=_25
In [28]: np.dot(u*s,vh)
Out[28]: 
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

使用我们使用的矩阵结果np.multiply

In [37]: u,s,vh=_24
In [38]: np.multiply(u,s)
Out[38]: 
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])
In [39]: np.multiply(u,s)*vh
Out[39]: 
matrix([[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]])

推荐阅读