浮点数组未转换为int:Python

浮点数组未转换为int:Python,python,arrays,numpy,floating-point,integer,Python,Arrays,Numpy,Floating Point,Integer,我有一个float numpy数组x,它包含0、.5、1、1.5等值。我想根据一些等式将浮点值转换成整数,并将它们存储在一个新数组newx中。我这样做了 newx=np.zeros(x.shape[0]) for i in range (x.shape [0]): newx[i]= ((2*x[i]) +1) print(newx, v) 然而,当打印xnew时,我得到如下值 (array([ 1., 2., 3., 4., 5.,

我有一个float numpy数组x,它包含0、.5、1、1.5等值。我想根据一些等式将浮点值转换成整数,并将它们存储在一个新数组newx中。我这样做了

newx=np.zeros(x.shape[0])
    for i in range (x.shape [0]):
        newx[i]=  ((2*x[i]) +1)
    print(newx, v)
然而,当打印xnew时,我得到如下值

(array([   1.,    2.,    3.,    4.,    5.,    6.,    7.,    8.,    9.,
         10.,   11.,   12.,   13.,   14.,   15.,   16.,   17.,   18.])
newx必须在某个进程中使用,它必须是整数,当我想在该进程中使用它时,我得到一个错误,指出它必须是整数或布尔类型。谁能告诉我我犯了什么错误


谢谢。

Numpy是专门为数组操作而设计的。尽量不要像以前那样迭代numpy数组。您可以了解numpy数据类型与内置数据类型的区别。这将导致更高的运行时间

无论如何,这里有一个工作代码为您的问题

newx=x*2+1
newx=numpy.int16(newx)      # as easy as this. ;)

将其转换为int类型:
print(newx.astype(np.int),v)
。整数类型通常可以自动转换为float类型,但另一种方法比较复杂,因此不是由Python/numpy自动完成的。@Evert,非常感谢,这个newx.astype(np.int)非常好用。为什么在这里使用
int16
?我在OP中没有看到任何东西表明这些是特别小的整数。顺便说一句,我很惊讶只需在这里传递
numpy.int16
数组就可以了;通常的建议是使用
asarray
函数或
astype
方法进行类型转换。你是对的@MarkDickinson,但答案的要点是教你为什么不应该迭代numpy数组。谢谢你的建议。