2012-10-10 37 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