Используйте np.multiply.outer
в диапазоне-массиве -
In [41]: n = 4
In [42]: np.multiply.outer(np.arange(n), np.arange(n))
Out[42]:
array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
Более короткий с распаковкой и range
вместо -
In [44]: np.multiply.outer(*[range(n)]*2)
Out[44]:
array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])