Sto provando a convertire un array bidimensionale in un array strutturato con campi denominati. Voglio che ogni riga nell'array 2D sia un nuovo record nell'array strutturato. Sfortunatamente, nulla di ciò che ho provato sta funzionando nel modo che mi aspetto.Conversione di un array numpy 2D in un array strutturato
sto iniziando con:
>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
['World' '3.6' '2']]
voglio convertire a qualcosa che assomiglia a questo:
>>> newarray = numpy.array([("Hello",2.5,3),("World",3.6,2)], dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[('Hello', 2.5, 3L) ('World', 3.6000000000000001, 2L)]
Quello che ho provato:
>>> newarray = myarray.astype([("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
[('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]
>>> newarray = numpy.array(myarray, dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
[('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]
Entrambi questi approcci tentano di convertire ogni voce in myarray in un record con il dtype specificato, quindi vengono inseriti gli zeri supplementari. Non riesco a capire come ottenerlo per convertire ogni riga in un record.
Un altro tentativo:
>>> newarray = myarray.copy()
>>> newarray.dtype = [("Col1","S8"),("Col2","f8"),("Col3","i8")]
>>> print newarray
[[('Hello', 1.7219343871178711e-317, 51L)]
[('World', 1.7543139673493688e-317, 50L)]]
Questa volta viene eseguita alcuna conversione vera e propria. I dati esistenti in memoria vengono semplicemente reinterpretati come nuovo tipo di dati.
L'array con cui sto iniziando viene letto da un file di testo. I tipi di dati non sono noti in anticipo, quindi non posso impostare il dtype al momento della creazione. Ho bisogno di una soluzione elegante e ad alte prestazioni che funzioni bene per i casi generali, poiché eseguirò questo tipo di conversione molte, molte volte per un'ampia varietà di applicazioni.
Grazie!
con 'fromrecords' puoi evitare il' transpose() ' –