2015-03-03 4 views
0

J'ai éléments du tableau de la forme:NumPy - ne trie pas correctement sans tableau des zéros de remplissage

['A 0', 'A 10', 'A 1', 'A 100', 'A 20', 'A 200'] 

Lorsque je tente de faire le tri avec np.sort(), il ne trie pas correctement. Comment trier correctement le tableau?

code

import numpy as np 
A = np.array(['A 0', 'A 10', 'A 1', 'A 100', 'A 20', 'A 200']) 
A = np.sort(A) 
print A 

Sortie

['A 0' 'A 1' 'A 10' 'A 100' 'A 20' 'A 200'] 

sortie souhaitée

['A 0' 'A 1' 'A 10' 'A 20' 'A 100' 'A 200'] 
+0

Qu'est-ce qui ne va pas? il semble bien d'ici – FeedTheWeb

+0

Il devrait le trier comme ['A 0' 'A 1' 'A 10' 'A 20' 'A 100' 'A 200']. –

+0

Vous triez des chaînes! Pourquoi attendez-vous autre chose qu'un tri lexical ici? –

Répondre

0

Ensuite, vous devez dire comment il est s upposed de le faire, comme par exemple:

lst.sort(key=lambda s: int(s[2:])) 
+0

Ce n'est pas une solution NumPy. –

1

La méthode la plus simple est de charger les données dans deux colonnes distinctes: la partie de texte et la partie numérique. Cela fonctionne:

>>> lst = ['A 0', 'A 10', 'A 1', 'A 100', 'A 20', 'A 200'] 
>>> A = np.loadtxt(lst, dtype=[('text', 'S4'), ('numbers', int)]) 
>>> A.sort(order='numbers') 
>>> A 
array([('A', 0), ('A', 1), ('A', 10), ('A', 20), ('A', 100), ('A', 200)], ...