La conversion 2D tableau numpy à un tableau structuré

Je suis en train de convertir un tableau à deux dimensions dans une structure de tableau avec le nom des champs. Je veux que chaque ligne dans le tableau 2D à un nouveau record dans la structure du tableau. Malheureusement, rien, j'ai essayé de travail est la façon dont je l'attends.

Je commence avec:

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

Je veux convertir à quelque chose qui ressemble à ceci:

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

Ce que j'ai essayé:

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

Ces deux approches tentent de convertir chaque entrée dans myarray dans un dossier avec le dtype, de sorte que les zéros supplémentaires sont insérées. Je ne peux pas comprendre comment l'obtenir pour la conversion de chaque ligne dans un enregistrement.

Une autre tentative:

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

Cette fois, aucune conversion n'est effectuée. Les données existantes dans la mémoire est tout simplement ré-interprété comme le nouveau type de données.

Le tableau que je suis en commençant par la lecture à partir d'un fichier texte. Les types de données ne sont pas connues à l'avance, donc je ne peux pas définir le dtype au moment de la création. J'ai besoin d'une haute performance et élégant qui va bien travailler pour les cas généraux depuis que je vais faire ce type de conversion beaucoup, beaucoup de fois pour une large variété d'applications.

Merci!

InformationsquelleAutor Emma | 2010-09-01