Вы можете использовать Moveaxis и изменить форму:
>>> from pprint import pprint
>>> import numpy as np
>>>
>>> a = sum(np.ogrid[:2, :30:10, :400:100])
>>> a
array([[[ 0, 100, 200, 300],
[ 10, 110, 210, 310],
[ 20, 120, 220, 320]],
[[ 1, 101, 201, 301],
[ 11, 111, 211, 311],
[ 21, 121, 221, 321]]])
>>>
>>> pprint([np.moveaxis(a, j, -1).reshape(-1, d) for j, d in enumerate(a.shape)])
[array([[ 0, 1],
[100, 101],
[200, 201],
[300, 301],
[ 10, 11],
[110, 111],
[210, 211],
[310, 311],
[ 20, 21],
[120, 121],
[220, 221],
[320, 321]]),
array([[ 0, 10, 20],
[100, 110, 120],
[200, 210, 220],
[300, 310, 320],
[ 1, 11, 21],
[101, 111, 121],
[201, 211, 221],
[301, 311, 321]]),
array([[ 0, 100, 200, 300],
[ 10, 110, 210, 310],
[ 20, 120, 220, 320],
[ 1, 101, 201, 301],
[ 11, 111, 211, 311],
[ 21, 121, 221, 321]])]
Разница между Moveaxis и Swapaxes здесь заключается в том, что Moveaxis сохраняет порядок оставшихся измерений.