2010-02-04 10 views

Respuesta

0

contestado desde Numpy-discussion por Robert Kern


Copia de concluir correo electrónico de esa discusión:

¿Cómo se convierte la matriz registro numpy a continuación: Recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] r = rec.fromrecords (recs, names = 'nombre, edad, peso', formatos = 'S30, i2, f4') a una lista de diccionarios como: [{'nombre': 'Factura', 'edad': 31, 'peso': 260.0}, 'nombre': 'Fred', 'edad': 15, 'peso': 145.0}]

Suponiendo que la matriz de registro sólo 1D:

En [6]: r.dtype.names de salida [6]: ('nombre', 'edad', 'peso')

en [7]: nombres = r.dtype.names

en [8]: [dict (zip (nombres, ficha)) para el registro en r] Fuera [8]: [{ 'edad' : 31, 'nombre': 'Bill', 'peso': 260 0,0}, { 'edad': 15, 'nombre': 'Fred', 'peso': 145.0}]

+1

-1, las respuestas de solo enlace se desaconsejan en SO. Si el enlace se pudre, entonces esta respuesta empeora y no existe: exasperante. –

+0

El enlace ya no está. Un resumen de la discusión sería genial – Zee

+0

El enlace no se ha ido, o solo ha desaparecido temporalmente. Respuesta downvoted, pero se agregó una copia de la conclusión de la discusión en esta respuesta. Que es la misma solución que la respuesta de USTED. – Evert

13

No estoy seguro hay una función incorporada para eso o no, pero el siguiente podría hacer el trabajo.

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

Probablemente vale la pena sacar 'r.dtype.names' a una variable local. Posiblemente 'izip' es más rápido que' zip' ya que el número de registros aumenta –

1

Esto depende de la estructura final requerido. Este ejemplo muestra un recarray numpy compuesto de varios subconjuntos 1D. Para tener un diccionario de Python en su lugar, una posible conversión es:

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} 
Cuestiones relacionadas