Решение может быть простым, используя аргумент порядка на месте sort . Конечно, order
требует имен полей, поэтому их нужно добавить в первую очередь.
d = x.dtype
x = x.view(dtype=[(str(i), d) for i in range(x.shape[-1])])
array([[(2, 10)],
[(1, 20)]], dtype=[('0', '<i8'), ('1', '<i8')])
Имена полей - это строки, соответствующие индексам столбцов. Сортировка может быть сделана на месте с помощью
x.sort(order='0', axis=0)
Затем преобразовать обратно в обычный массив с исходным типом данных
x.view(d)
array([[ 1, 20],
[ 2, 10]])
Это должно работать, хотя вам может понадобиться изменить способ просмотра в зависимости от того, как данные хранятся на диске, см. Документация
Для a.view (some_dtype), если some_dtype имеет другое количество байтов на запись, чем предыдущий dtype (например, преобразование обычного массива в структурированный массив), поведение представления не может быть предсказано только из поверхностный вид (показано печатью (а)). Это также зависит от того, как именно хранится в памяти. Следовательно, если a является C-упорядоченным по сравнению с Fortran-упорядоченным, а не определенным как срез или транспонирование и т. Д., Представление может дать разные результаты.