In [4]: x, y = np.meshgrid(np.arange(5), np.arange(6))
In [5]: x.shape
Out[5]: (6, 5)
In [6]: y.shape
Out[6]: (6, 5)
x
не может работать напрямую с массивом размера 10:
In [7]: x-np.arange(10)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-cd10c5c1eea4> in <module>
----> 1 x-np.arange(10)
ValueError: operands could not be broadcast together with shapes (6,5) (10,)
, но, добавив измерение к x
, сделав его (6,5,1), он будет 'широковещательный' с (10,):
In [8]: (x[:,:,None]-np.arange(10)).shape
Out[8]: (6, 5, 10)
Эффективно: (6,5,1) (10,) => (6,5,1) (1,1,10) => (6,5,10)
Тогда мы можем сделать сумму по последнему измерению
In [9]: (x[:,:,None]-np.arange(10)).sum(axis=2).shape
Out[9]: (6, 5)
В качестве альтернативы (x - np.arange(10)[:,None,None]).sum(axis=0)
, поставив (10,) на первое место.