【问题标题】:Is numpy.multiply always equivalent to the * operator? [duplicate]numpy.multiply 是否总是等同于 * 运算符? [复制]
【发布时间】:2018-03-30 03:02:00
【问题描述】:

numpy.multiply documentation 说:

就数组广播而言,相当于 x1 * x2。

np.multiply(x1, x2)x1 * x2 在任何情况下是否不同?

我在哪里可以找到每个的实现?


注意:analogous question exists for division,但它没有提到乘法,也没有暗示在乘法的情况下答案是一样的。

此问题还要求提供特定于乘法的实现细节。

【问题讨论】:

  • 3天前有人问过这个问题:Numpy np.multiply vs *-Operator
  • 你为什么要问?你有什么奇怪的情况吗?您使用的是什么类型的对象? equivalent 语句适用于数字 ndarray,而不是 np.matrixlist
  • 在不到一周的时间内,我们突然收到三个(也许更多)几乎相同的问题,这很奇怪,而我只记得以前见过其中一个(并且在搜索中找不到) .是否有人在教授一门新课程,里面全是经验丰富的程序员,但对 numpy 还是陌生的?
  • @abarnet 我正在做一个 coursera 课程,但它肯定不是新的。我只是在深入研究:)

标签: python arrays numpy matrix-multiplication vector-multiplication


【解决方案1】:

补充@COLDSPEED 的回答我想强调的是,对于非数组操作数,结果实际上可能完全不同:

>>> import numpy as np
>>> 
>>> 2 * [1, 2]
[1, 2, 1, 2]
>>> np.multiply(2, [1, 2])
array([2, 4])

【讨论】:

    【解决方案2】:

    是的,np.multiply 和乘法运算符 * 始终适用于 ndarray 对象。

    In [560]: x = np.array([1, 2, 3])
    
    In [561]: y = np.array([4, 5, 6])
    
    In [562]: x * y
    Out[562]: array([ 4, 10, 18])
    
    In [563]: np.multiply(x, y)
    Out[563]: array([ 4, 10, 18])
    

    唯一的主要区别在于 matrix 对象,为此,* 被设置为执行矩阵乘法(即点积)。

    In [564]: x, y = map(np.matrix, (x, y))
    
    In [565]: np.multiply(x, y)
    Out[565]: matrix([[ 4, 10, 18]])
    
    In [566]: x * y
    ValueError: shapes (1,3) and (1,3) not aligned: 3 (dim 1) != 1 (dim 0)
    

    此外,正如@PaulPanzer 在他的回答中提到的那样,当将纯 python 列表与标量相乘时,它们的行为会有所不同。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2012-06-26
    • 2023-04-08
    • 2023-02-06
    相关资源
    最近更新 更多