numpy.argsort
сортирует многомерный массив вдоль своей последней оси, если не указано иное. Ваш s.shape
- это то же самое, что и ar.shape
, но тот факт, что вы даже можете использовать ar[s]
без получения IndexErrors, просто потому, что вы выбрали красивую форму для начала.
Прежде всего, вам нужно подумать о том, что вы действительно хотите отсортировать. Скажем, у вас есть:
[[8, 7],
[6, 5],
[4, 3]]
Что вы хотите купить? Слева направо:
[[7, 8],
[5, 6],
[3, 4]]
или сверху вниз:
[[4, 3],
[6, 5],
[8, 7]]
или полностью:
[[3, 4],
[5, 6],
[7, 8]]
Последний один, вероятно, самый простой выравниваться, а затем изменить форму.
arf = ar.flatten()
s = numpy.argsort(arf)
arf[s].reshape(ar.shape)
Первый один немного сложнее:
s = numpy.argsort(ar)
numpy.array([[ar2[s2] for ar2, s2 in zip(ar1, s1)] for ar1, s1 in zip(ar, s)])
Последняя домашнее задание.