Сортировка буквенно-цифровых строк в матрице numpy

У меня есть матрица с 10 столбцами разных типов. Я отсортировал их по буквенно-цифровому столбцу с помощью:

data = np.sort(data, axis=0,order='AlphaNumColumn')

Это не сделало работу правильно, т.е.

BFT_job10_q0
BFT_job13_q0
BFT_job13_q1
BFT_job1_q0

вместо :

BFT_job1_q0
BFT_job10_q0
BFT_job13_q0
BFT_job13_q1

Что-нибудь numpy может с этим поделать ?? Спасибо!


person Sara    schedule 29.06.2013    source источник
comment
Связано: stackoverflow.com/questions /7638738/   -  person Ashwini Chaudhary    schedule 29.06.2013


Ответы (1)


Порядок сортировки кажется правильным. Я бы порекомендовал вам пересмотреть вашу нумерацию:

1 becomes 01

Если вам нужно сохранить свою нумерацию, вы также можете сделать:

key = lambda x: '.'.join(x.split('_')[1:3]).replace('job','').replace('q','')

a[np.argsort([float(key(i)) for i in a[:,0]])]

Где key() будет делать следующее:

key('BFT_job10_q0') --> 10.
key('BFT_job1_q0')  --> 1.
key('BFT_job13_q1') --> 13.1
key('BFT_job13_q0') --> 13.
person Saullo G. P. Castro    schedule 29.06.2013
comment
Спасибо, хорошо продумано! Проблема в том, что я должен оставить имена такими, какие они есть, так как это важно для последующей работы... Поэтому я мог бы использовать key() после сортировки, чтобы вернуть удаленные части имени на место - и я это сделаю, так что еще раз спасибо, но есть ли способ легко получить буквенно-цифровую сортировку? - person Sara; 29.06.2013
comment
Не волнуйся. имена сохраняются как есть. Я только что показал вам, как работает key(). Но эта функция используется только для сортировки, без изменения исходных значений... - person Saullo G. P. Castro; 29.06.2013
comment
Привет еще раз. Я чувствую себя беспомощным. Я пытался адаптировать ваш код к новому набору имен, но не могу найти способ сделать это. Данные обычно такие же, как и раньше, но на этот раз немного больше: BFT_job10_q0_type0 и т. д. Ваш код не работает, так как число с двумя десятичными знаками больше не является числом с плавающей запятой... - person Sara; 30.06.2013