numpy矩阵向量乘法

numpy矩阵向量乘法,第1张

numpy矩阵向量乘法 最简单的解决方案

使用

numpy.dot
a.dot(b)
。请参阅此处的文档。

>>> a = np.array([[ 5, 1 ,3],        [ 1, 1 ,1],        [ 1, 2 ,1]])>>> b = np.array([1, 2, 3])>>> print a.dot(b)array([16, 6, 8])

发生这种情况是因为numpy数组不是矩阵,并且标准 *** 作

*, +, -,/
在数组上逐个元素地工作。相反,您可以尝试使用
numpy.matrix
*
并将其视为矩阵乘法。


其他解决方案

也知道还有其他选择:

  • 如下所述,如果使用python3.5 +,该

    @
    运算符将按您的预期工作:

    >>> print(a @ b)

    array([16, 6, 8])

  • 如果要过度杀伤,可以使用

    numpy.einsum
    。该文档将为您提供它的工作原理,但老实说,直到阅读此答案并自己玩弄它之前,我还不完全了解如何使用它。

    >>> np.einsum('ji,i->j', a, b)

    array([16, 6, 8])

  • 截至2016年中(numpy 1.10.1),您可以尝试一下实验性

    numpy.matmul
    ,它的工作原理
    numpy.dot
    与以下两个主要例外相同:无标量乘法,但可用于矩阵堆栈。

    >>> np.matmul(a, b)

    array([16, 6, 8])

  • numpy.inner
    功能相同的方式
    numpy.dot
    对矩阵-向量乘法但表现不同 矩阵基质和张量乘法(参见维基百科关于之间的差异的内积和点积在一般或看到该SO答案关于numpy的的实现)。

    >>> np.inner(a, b)

    array([16, 6, 8])

    Beware using for matrix-matrix multiplication though!

    b = a.T
    np.dot(a, b)
    array([[35, 9, 10],
    [ 9, 3, 4],
    [10, 4, 6]])
    np.inner(a, b)
    array([[29, 12, 19],
    [ 7, 4, 5],
    [ 8, 5, 6]])


边缘案例的较难选项
  • 如果有张量(维数大于或等于1的数组),则可以使用

    numpy.tensordot
    可选参数
    axes=1

    >>> np.tensordot(a, b, axes=1)

    array([16, 6, 8])

  • numpy.vdot
    如果您有复数矩阵,请 不要使用 ,因为该矩阵将被展平为一维数组,然后它将尝试在展平的矩阵和向量之间找到复杂的共轭点积(由于大小不匹配而失败)
    n*m
    vs
    n
    )。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存