Umwandlung eines 2D-Numpy-Arrays in ein strukturiertes Array

Ich versuche, ein zweidimensionales Array in ein strukturiertes Array mit benannten Feldern umzuwandeln. Ich möchte, dass jede Zeile im 2D-Array ein neuer Datensatz im strukturierten Array ist. Leider funktioniert nichts, was ich ausprobiert habe, so, wie ich es erwartet habe.

Ich fange an mit:

>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
 ['World' '3.6' '2']]

Ich möchte in etwas konvertieren, das so aussieht:

>>> 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)]

Was ich versucht habe:

>>> 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)]]

Beide dieser Ansätze versuchen, jeden Eintrag in myarray in einen Datensatz mit dem angegebenen D-Typ zu konvertieren, sodass die zusätzlichen Nullen eingefügt werden. Ich kann nicht herausfinden, wie ich es dazu bringen kann, jede Zeile in einen Datensatz zu konvertieren.

Ein weiterer Versuch:

>>> newarray = myarray.copy()
>>> newarray.dtype = [("Col1","S8"),("Col2","f8"),("Col3","i8")]
>>> print newarray
[[('Hello', 1.7219343871178711e-317, 51L)]
 [('World', 1.7543139673493688e-317, 50L)]]

Zu diesem Zeitpunkt wird keine eigentliche Konvertierung durchgeführt. Die vorhandenen Daten im Speicher werden nur als neuer Datentyp interpretiert.

Das Array, mit dem ich beginne, wird aus einer Textdatei eingelesen. Die Datentypen sind nicht im Voraus bekannt, daher kann ich den dtype zum Zeitpunkt der Erstellung nicht festlegen. Ich benötige eine leistungsstarke und elegante Lösung, die für allgemeine Fälle gut geeignet ist, da ich diese Art der Konvertierung viele Male für eine Vielzahl von Anwendungen ausführen werde.

Vielen Dank

Antworten auf die Frage(8)

Ihre Antwort auf die Frage