2012-10-10 67 views
2

我想將整數類型的記錄[(1, 2, 3) (2, 2, 3)]轉換爲浮點型數組[(1.0, 2.0, 3.0), (2.0, 2.0, 3.0)]。但是,當我給出命令c.astype('float')我在輸出得到的是rec.array([ 1., 2.])。爲什麼其他元素從數組中刪除?numpy convert 2D整數記錄到2D浮點記錄

有人請給我正確的解決方案? 我正確的做法嗎?

更新 我創建3點不同的陣列這樣的記錄 - d=np.rec.fromarrays([a, b, c], names='x,y,z'),以便對它們進行排序,並做一些操作。

下面是完整的代碼 -

a=[1,2] 
b=[2,2] 
c=[3,3] 
d=np.rec.fromarrays([a, b, c], names='x,y,z') 
print d 
d.astype('float') 
print d 

回答

3

不雅,但(顯然)工作:

In [23]: import numpy as np 

In [24]: a=[1,2] 

In [25]: b=[2,2] 

In [26]: c=[3,3] 

In [27]: d=np.rec.fromarrays([a, b, c], names='x,y,z') 

In [28]: d 
Out[28]: 
rec.array([(1, 2, 3), (2, 2, 3)], 
     dtype=[('x', '<i4'), ('y', '<i4'), ('z', '<i4')]) 

In [29]: d.astype([(k, float) for k in d.dtype.names]) 
Out[29]: 
rec.array([(1.0, 2.0, 3.0), (2.0, 2.0, 3.0)], 
     dtype=[('x', '<f8'), ('y', '<f8'), ('z', '<f8')]) 
+0

太棒了!完美按照想要的工作! :) – Raj

4
>>> np.array([(3, 0, 1)]).astype('float') 
array([[ 3., 0., 1.]]) 

請問你的代碼看起來不同?

+0

哦,是的,我想我沒有二維數組,但有記錄。我從3個不同的數組創建了一個記錄 - 'c = np.rec.fromarrays([a,b,c],names ='x,y,z')' 現在怎麼辦? :( – Raj

1

嗯...我可以哄它的唯一途徑是:

a = np.rec.array([(1,2,3)]) 
np.array(list(a[0]),dtype='float') 

用於在N維數組:

a = np.array(map(list,d),dtype='float') 

希望別人將與更好的方式來一起...

+0

你的解決方案是好的,但是,我只是想將記錄中的每個元素從整數轉換爲浮點數。對不起,但是我再次更新了代碼以提供一個最小工作示例 – Raj

+0

是否有可能輸出仍然是記錄,而不是轉換爲陣列:) :) – Raj

+0

@RajTendulkar - 不知道。我通常不會使用記錄數組。當然,你可以將數組'a'轉換回記錄數組。例如:'d = np.rec.array(zip(* a),names ='x,y,z')' – mgilson