我試圖將二維數組轉換爲具有命名字段的結構化數組。我希望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