Вы делаете это, потому что вам это нужно или просто для спорта? В первом случае:
np.moveaxis(np.indices((4,5)), 0, -1)
np.indices
делает именно то, что предлагает его название. Только он упорядочивает оси по-другому. Поэтому мы перемещаем их с помощью moveaxis
. Поскольку @Eric указывает, что одна привлекательная особенность этого метода заключается в том, что он работает без изменений при произвольном числе измерений:
dims = tuple(np.multiply.reduceat(np.zeros(16,int)+2, np.r_[0, np.sort(np.random.choice(16, np.random.randint(10)))]))
# len(dims) == ?
np.moveaxis(np.indices(dims), 0, -1) # works