Преобразование двумерного массива в структурный массив

Я пытаюсь преобразовать двумерный массив в структурированный массив с именованными полями. Я хочу, чтобы каждая строка в 2D-массиве была новой записью в структурированном массиве. К сожалению, ничего из того, что я пробовал, не работает так, как я ожидаю.

Я начинаю с:

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

Я хочу преобразовать во что-то похожее на это:

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

Что я пробовал:

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

Оба эти подхода пытаются преобразовать каждую запись в myarray в запись с данным dtype, поэтому вставляются дополнительные нули. Я не могу понять, как заставить его конвертировать каждую строку в запись.

Еще одна попытка:

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

На этот раз фактическое преобразование не выполняется. Существующие данные в памяти просто интерпретируются как новый тип данных.

Массив, с которого я начинаю, читается из текстового файла. Типы данных не известны заранее, поэтому я не могу установить dtype во время создания. Мне нужно высокопроизводительное и элегантное решение, которое будет хорошо работать в общих случаях, так как я буду многократно использовать этот тип преобразования для большого разнообразия приложений.

Спасибо!

Ответы на вопрос(4)

Ваш ответ на вопрос