2010-02-04 2 views

Répondre

0

Répondu à Numpy-discussion par Robert Kern


Copie de la conclusion courriel de cette discussion:

Comment convertir le tableau d'enregistrement numpy ci-dessous: recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] r = rec.fromrecords (recs, noms = 'nom, âge, poids', formats = 'S30, i2, f4') à une liste de dictionnaire comme: [{'name': 'Bill', 'âge': 31, 'poids': 260,0}, 'nom': 'Fred', 'âge': 15, 'poids': 145,0}]

en supposant que votre tableau d'enregistrement est seulement 1D:

Dans [6]: r.dtype.names Out [6]: ('nom', 'âge', 'poids')

dans [7]: nom = r.dtype.names

dans [8]: [dict (zip (noms, enregistrement)) pour l'enregistrement en r] Out [8]: [{ 'age' : 31, 'nom': 'Bill', 'poids': 260 .0}, { 'age': 15, 'nom': 'Fred', 'poids': 145,0}]

+1

-1, les réponses aux liens seuls sont fortement déconseillées sur SO. Si le lien pourrit, alors cette réponse devient pire que de ne pas exister: exaspérant. –

+0

Le lien est déjà parti. Un résumé de la discussion serait génial – Zee

+0

Le lien n'est pas parti, ou a été seulement temporairement disparu. Réponse downvoted, mais a ajouté une copie de la conclusion de la discussion dans cette réponse. Quelle est la même solution que la réponse de VOUS? – Evert

13

Je ne suis pas sûr il y a une fonction intégrée pour cela ou pas, mais suivre pourrait faire le travail.

>>> [dict(zip(r.dtype.names,x)) for x in r] 
[{'age': 31, 'name': 'Bill', 'weight': 260.0}, 
{'age': 15, 'name': 'Fred', 'weight': 145.0}] 
+1

Cela vaut probablement la peine d'extraire 'r.dtype.names' d'une variable locale. Il est possible que 'izip' soit plus rapide que 'zip' au fur et à mesure que le nombre d'enregistrements augmente –

1

Cela dépend de la structure finale requise. Cet exemple montre un recarray numpy composé de plusieurs sous-ensembles 1D. Pour avoir un dictionnaire python à la place, une conversion possible est:

import numpy as np 

a = np.rec.array([np.array([1,3,6]), np.array([3.4,4.2,-1.2])], names=['t', 'x']) 

b = {name:a[name] for name in a.dtype.names} 
Questions connexes