2010-02-04 7 views

risposta

0

Risposto al Numpy-discussion da Robert Kern


copia di concludere e-mail da quella discussione:

Come posso convertire la matrice di record di NumPy di ​​seguito: RECS = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] r = rec.fromrecords (recs, nomi = 'nome, età, peso', formati = 'S30, i2, f4') a un elenco di dizionari come: [{'nome': 'Bill', 'età': 31, 'peso': 260.0}, 'nome': 'Fred', 'età': 15, 'peso': 145.0}]

Supponendo che l'array record è solo 1D:

In [6]: r.dtype.names out [6]: ('name', 'l'età', 'peso')

in [7]: nomi = r.dtype.names

in [8]: [dict (zip (nomi, record)) per il record r] out [8]: [{ 'età' : 31, 'nome': 'Bill', 'peso': 260 0,0}, { 'eta': 15, 'name': 'Fred', 'peso': 145.0}]

+1

-1, le risposte di solo collegamento sono fortemente sconsigliate su SO. Se il link marcisce, allora questa risposta diventa peggiore di quanto non esistesse: esasperante. –

+0

Il collegamento è già sparito. Un riassunto della discussione sarebbe fantastico – Zee

+0

Il collegamento non è andato, o è stato solo temporaneamente sparito. Risposta in downvot, ma aggiunta copia della conclusione della discussione in questa risposta. Qual è la stessa soluzione della risposta di YOU. – Evert

13

Non sono sicuro c'è una funzione integrata per quello o no, ma in seguito potrebbe fare il lavoro.

>>> [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

probabilmente vale la pena tirando fuori 'r.dtype.names' a una variabile locale. Forse 'izip' è più veloce di' zip' dato che il numero di record aumenta –

1

Ciò dipende dalla struttura finale richiesto. Questo esempio mostra una ripetizione numpy composta da diversi sottoinsiemi 1D. Per avere un dizionario Python, invece, una possibile conversione è:

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} 
Problemi correlati