我正在尝试将二维数组转换为具有命名字段的结构化数组。我希望二维数组中的每一行都是结构化数组中的新记录。不幸的是,我所尝试的一切都没有按照我期望的方式工作。
我从以下开始:
>>> 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 中的每个条目转换为具有给定数据类型的记录,因此会插入额外的零。我不知道如何让它将每一行转换为一条记录。
另一种尝试:
>>> newarray = myarray.copy()
>>> newarray.dtype = [("Col1","S8"),("Col2","f8"),("Col3","i8")]
>>> print newarray
[[('Hello', 1.7219343871178711e-317, 51L)]
[('World', 1.7543139673493688e-317, 50L)]]
这次没有执行实际的转换。内存中现有的数据只是被重新解释为新的数据类型。
我开始使用的数组是从文本文件中读取的。数据类型提前未知,因此我无法在创建时设置数据类型。我需要一个高性能且优雅的解决方案,该解决方案适用于一般情况,因为我将为各种应用程序多次执行此类转换。
Thanks!