argsort
применено к сглаженному массиву:
In [110]: np.argsort(arr1.ravel())
Out[110]: array([3, 0, 1, 2, 5, 4, 7, 6])
Преврати это в двумерные индексы:
In [111]: np.unravel_index(_,(2,4))
Out[111]: (array([0, 0, 0, 0, 1, 1, 1, 1]), array([3, 0, 1, 2, 1, 0, 3, 2]))
Объедините массивы в один и измените форму:
In [112]: np.transpose(_)
Out[112]:
array([[0, 3],
[0, 0],
[0, 1],
[0, 2],
[1, 1],
[1, 0],
[1, 3],
[1, 2]])
In [113]: _+1 # tweak values to match yours
Out[113]:
array([[1, 4],
[1, 1],
[1, 2],
[1, 3],
[2, 2],
[2, 1],
[2, 4],
[2, 3]])
In [114]: _.reshape(2,4,2)
Out[114]:
array([[[1, 4],
[1, 1],
[1, 2],
[1, 3]],
[[2, 2],
[2, 1],
[2, 4],
[2, 3]]])