2016-05-17 9 views
1

Ich weiß, dass dies eine sehr klassische Frage ist, aber nach vielen Posts habe ich beschlossen, es zurück zu bringen, ohne in der Lage zu sein, eine elegante Lösung für etwas scheinbar einfach zu finden. Das Problem:Von Python Counter-Wörterbuch zu nd numpy Array

Ich habe einen Zähler Wörterbuch aus einem großen Datensatz, mit aussagekräftigen integer Schlüsseln und integer Vorkommen:

co = Counter({8046: 1360, 10046: 1248, 11046: 1024}) 

Und ich einfach will mit einem grundlegenden Integer-Array, um am Ende:

a = np.array([[8046,1360],[10046,1248],[11046,1024]]) 

die Spezifität dieses Problem (oder das Fehlen von Spezifität) ist, dass I integer Tasten haben, und ich nicht ein strukturiertes Array benötigen. Die folgenden

dtype = dict(names = ['id','data'], formats=['i8','i8']) 
array = np.fromiter(iter(co.items()), dtype=dtype) 

ist nicht ganz befriedigend, bis mit der Endung

a = [(8046, 1360) (10046, 1248) (11046, 1024)] 

Ist es nur eine Frage der dtype? Danke vielmals!

Antwort

2

Man könnte es in eine Liste von Liste aktivieren, bevor zu einem numpy Array konvertieren:

>>> np.array(list(co.items())) 
array([[ 8046, 1360], 
     [10046, 1248], 
     [11046, 1024]]) 
+0

Ja! Ich habe mich in diesen Typen und Iteratoren verloren und die Grundlagen vergessen. Also die Kombination np.array (list()) vermeidet uns, dtypes anzugeben. Jetzt wandle ich, warum 'np.fromiter' so starr ist, aber ich denke, ich vermisse gerade etwas. Danke @kennytm. – Etienne

+0

Wenn ich nicht falsch liege, sollte ein einfaches 'co.items()' anstelle von 'list (co.items())' genügen. – JRodDynamite

+1

@JRodDynamite 'np.array (co.items())' erstellt ein Array von Objekten anstelle von 2D-Arrays. 'array (dict_items ([(8046, 1360), (10046, 1248), (11046, 1024)]), dtype = Objekt)' – kennytm