首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不同形状NumPy数组的元素乘法

不同形状NumPy数组的元素乘法
EN

Stack Overflow用户
提问于 2018-07-15 19:18:26
回答 3查看 2.5K关注 0票数 0

当我使用numpy.multiply(a,b)将numpy数组与形状(2, 1),(2,)相乘时,我得到一个2乘2的矩阵。但我想要的是基于元素的乘法。

我不熟悉numpy的规则。有人能解释一下这里发生了什么吗?

EN

回答 3

Stack Overflow用户

发布于 2018-07-15 19:38:09

下面是与您提到的形状相同的输入数组ab

代码语言:javascript
复制
In [136]: a
Out[136]: 
array([[0],
       [1]])

In [137]: b
Out[137]: array([0, 1])

现在,当我们使用*numpy.multiply(a, b)进行乘法运算时,我们得到:

代码语言:javascript
复制
In [138]: a * b
Out[138]: 
array([[0, 0],
       [0, 1]])

结果是一个(2,2)数组,因为numpy使用广播。

代码语言:javascript
复制
       # b
    #a | 0     1
     ------------
     0 | 0*0   0*1
     1 | 1*0   1*1
票数 1
EN

Stack Overflow用户

发布于 2018-07-15 19:38:43

假设您有两个数组,ab,形状分别为(2,3)(2,)

代码语言:javascript
复制
a = np.random.randint(10, size=(2,3))
b = np.random.randint(10, size=(2,))

例如,这两个数组包含:

代码语言:javascript
复制
a = np.array([[8, 0, 3],
              [2, 6, 7]])
b = np.array([7, 5])

现在,为了将产品元素处理为元素a*b,您必须指定当到达数组b的缺失axis=1时numpy必须执行的操作。可以通过添加None来执行此操作

代码语言:javascript
复制
result = a*b[:,None]

其中result为:

代码语言:javascript
复制
array([[56,  0, 21],
       [10, 30, 35]])
票数 0
EN

Stack Overflow用户

发布于 2018-07-16 00:15:22

我刚刚用broadcasting arrays in numpy解释了广播规则

在你的情况下

代码语言:javascript
复制
(2,1) + (2,) => (2,1) + (1,2) => (2,2)

它必须向第二个参数添加一个维度,并且只能在开头添加它(以避免歧义)。

所以你想要一个(2,1)结果,你必须自己用reshape[:, np.newaxis]展开第二个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51347854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档