2011-04-15 10 views
15

Ricevo un grande array (immagine con 12 Mpix) nel formato array dalla lib di python standard. Dato che voglio eseguire operazioni su questi array, desidero convertirlo in un array numpy. Ho provato la seguente:efficiente array python per la conversione di numpy array

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

ho un risultato tra uno o due secondi: equivalente ad un anello in pitone.

Esiste un modo più efficiente per eseguire questa conversione?

+0

Qual è l'effettiva fonte dei dati? Deve venire attraverso il tipo di matrice? –

+0

La mia sorgente è una lib che non posso modificare. Non posso cambiarlo per usare numpy. – Simon

risposta

34
np.array(test)          # 1.19s 

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

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

grazie! Stavo pensando a qualcosa come 'frombuffer'. – Simon

+0

dang, non sapevo di frombuffer! Grazie! –

+0

C'è qualcos'altro che conta come "buffer"? Tutto ciò che Numpy dice è "Un oggetto che espone l'interfaccia del buffer". Ci sono dei downfals per usarlo e se no perché np.array lo usa internamente? –