Convertir una matriz numpy 2D en una matriz estructurada

Estoy tratando de convertir una matriz bidimensional en una matriz estructurada con campos con nombre. Quiero que cada fila en la matriz 2D sea un nuevo registro en la matriz estructurada. Desafortunadamente, nada de lo que he intentado funciona de la manera que esperaba.

Estoy empezando con:

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

Quiero convertir a algo que se vea así:

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

Lo que he intentado:

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

Ambos enfoques intentan convertir cada entrada en myarray en un registro con el dtype dado, por lo que se insertan los ceros adicionales. No puedo encontrar la manera de convertir cada fila en un registro.

Otro intento:

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

Esta vez no se realiza una conversión real. Los datos existentes en la memoria simplemente se reinterpretan como el nuevo tipo de datos.

La matriz con la que estoy comenzando se está leyendo desde un archivo de texto. Los tipos de datos no se conocen con anticipación, por lo que no puedo establecer el tipo de letra en el momento de la creación. Necesito una solución elegante y de alto rendimiento que funcione bien para casos generales, ya que haré este tipo de conversión muchas, muchas veces para una gran variedad de aplicaciones.

¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta