python numpy矩阵乘_numpy矩阵向量乘法

大话西游666

最简单的解决方案使用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),您可以尝试使用Experimenting 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*mvs n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值