numpy将2D整数记录转换为2D浮点记录

时间:2012-10-10 13:04:45

标签: python numpy

我想将整数类型的记录[(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.])。为什么从数组中删除其他元素?

有人可以给我正确的解决方案吗? 我是以正确的方式做到的吗?

更新 我从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 个答案:

答案 0 :(得分:3)

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

您的代码看起来有什么不同吗?

答案 1 :(得分: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')])

答案 2 :(得分:1)

嗯......我能哄的唯一方法是:

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

表示N维数组:

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

希望其他人能有更好的方式......