2011-04-15 20 views
15

Obtengo una gran matriz (imagen con 12 Mpix) en el formato de matriz de la lib de python estándar. Como quiero realizar operaciones en esas matrices, deseo convertirlas en una matriz numpy. He intentado lo siguiente:matriz de python eficiente para numpy conversión de matriz

import numpy 
import array 
from datetime import datetime 
test = array.array('d', [0]*12000000) 
t = datetime.now() 
numpy.array(test) 
print datetime.now() - t 

obtengo un resultado entre uno o dos segundos: equivalente a un bucle en el pitón.

¿Hay alguna forma más eficiente de realizar esta conversión?

+0

¿Cuál es la fuente real de sus datos? ¿Tiene que venir a través del tipo de matriz? –

+0

Mi fuente es una lib que no puedo modificar. No puedo cambiarlo para usar numpy. – Simon

Respuesta

34
np.array(test)          # 1.19s 

np.fromiter(test, dtype=np.int)      # 1.08s 

np.frombuffer(test)         # 459ns !!! 
+0

gracias! Estaba pensando en algo así como 'frombuffer'. – Simon

+0

Dang, no sabía de frombuffer! ¡Gracias! –

+0

¿Hay algo más que cuente como 'buffer'? Todo lo que numpy dice es "Un objeto que expone la interfaz del búfer". ¿Hay alguna desventaja para usar esto, y si no es así, por qué np.array no lo usa internamente? –

Cuestiones relacionadas