Компактный способ расширения массива (n,) до (n, 1) с помощью индексации np.newaxis
или None
:
In [30]: a = np.arange(1,5); b = np.arange(1,4)*10
In [31]: a,b
Out[31]: (array([1, 2, 3, 4]), array([10, 20, 30]))
In [32]: a[:,None]+b
Out[32]:
array([[11, 21, 31],
[12, 22, 32],
[13, 23, 33],
[14, 24, 34]])
, где:
In [33]: a[:,None]
Out[33]:
array([[1],
[2],
[3],
[4]])
Процесс broadcasting
:
(m,1), (n,) => (m,1),(1,n) => (m,n)
Версия ufunc
+
равна np.add
, и поэтому он имеет метод outer
:
In [35]: np.add.outer(a,b)
Out[35]:
array([[11, 21, 31],
[12, 22, 32],
[13, 23, 33],
[14, 24, 34]])
np.outer(a,b)
и np.multiply.outer(a,b)
и a[:,None]*b
являются эквивалентными outer product
выражениями.