我试图将二维数组转换为具有命名字段的结构化数组。我希望2D数组中的每一行都是结构化数组中的新记录。不幸的是,我所尝试过的任何事情都是按我期望的方式工作。将2D numpy阵列转换为结构化数组
我开始有:
>>> 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。我需要一个高性能和优雅的解决方案,它可以很好地适用于一般情况,因为我将为许多应用程序进行多次这种类型的转换。
谢谢!
with'fromrecords'你可以避免''转置()' – 2014-04-01 21:10:16