вам нужно использовать трансляцию:
a[None, :] * d[:, None]
In [2]: a = np.arange(5)
In [3]: d = np.arange(3)
In [4]: a[None, :] * d[:, None]
Out[4]:
array([[0, 0, 0, 0, 0],
[0, 1, 2, 3, 4],
[0, 2, 4, 6, 8]])
Вы можете использовать np.newaxis вместо None, он делает то же самое (np.newaxis - это просто псевдоним с более явным именем). Для чего нужно добавить дополнительную ось к a
или d
:
In [5]: a[None, :].shape
Out[5]: (1, 5)
Broadcasting - очень эффективный инструмент для выполнения операций с массивами в numpy, подробнее об этом в документе .
Как замечание, a * d[:, None]
также будет работать, но я считаю, что первая формулировка будет более явной.