形状(N,M)和(N,)数组之间的广播操作

时间:2017-12-19 03:18:06

标签: python arrays numpy

这是一个相当简单的问题,但我似乎无法找到答案。考虑两个简单的数组:

import numpy as np
a = np.random.uniform(0., 1., (2, 1000))
b = np.random.uniform(0., 1., (2,))

我想执行操作a - b,以便最终数组为([[a[0] - b[0], a[1] - b[1]])并且我得到

ValueError: operands could not be broadcast together with shapes (2,1000) (2,) 

如何执行此(或其他)操作?

1 个答案:

答案 0 :(得分:2)

根据General Broadcasting Rules

  

在两个阵列上操作时,NumPy会比较它们的形状   逐元素。它从尾随尺寸开始,并起作用   前进的方向。

时兼容两个维度      
      
  1. 他们是平等的,或
  2.   
  3. 其中一个是1
  4.   

错误是因为a(1000)和b(2)的最后一个维度无法广播;您可以将b转换为形状(2, 1)的二维数组,以便1 - > (可以广播到)10002 - > (可以广播到)2

a - b[:,None]                            
#array([[ 0.06475683, -0.43773571, -0.62561564, ...,  0.05205518,
#        -0.1209487 ,  0.16334639],
#       [ 0.58443617,  0.28764136,  0.75789299, ...,  0.18159133,
#         0.28548633, -0.12037869]])

a - b.reshape(2,1)