2015-06-29 25 views
-1

我有一个float numpy数组x,其中包含像0,.5,1,1.5等值。我想基于某个方程将浮点值转换为整数,并将它们存储在一个新的数组newx中。我这样做,浮点数组不被转换为int:Python

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.]) 

下一页末值必须在某些过程中使用,且必须是整数,当我想在使用它过程中,我得到一个错误,指出它必须是整数或布尔类型。任何人都可以告诉我我做了什么错误?

谢谢。

+1

它转换为int类型的工作代码:'打印(newx.astype(np.int),V)'。 – Evert

+0

整数类型通常可以自动转换为浮点类型,但反过来更复杂一些,因此不会由Python/numpy自动完成。 – Evert

+0

@Evert,非常感谢,这个newx.astype(np.int)完美地唤起了你的注意力。 – Dania

回答

1

Numpy是专门为数组操作而设计的。尽量不要像你那样迭代一个numpy数组。您可以阅读有关numpy数据类型与内置数据类型有点不同的内容。这导致更高的运行时间。

反正这里是你的问题

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

太好了,谢谢。 – Dania

+0

为什么在这里使用'int16'?我没有看到OP中的任何内容,暗示这些是特别小的整数。顺便说一句,我很惊讶,简单地通过'numpy.int16'数组在这里工作;通常的建议是使用'asarray'函数或'astype'方法进行类型转换。 –

+0

那么你是对的@MarkDickinson,但答案的重点是要教导为什么numpy数组不应该被迭代。感谢您的建议,但。 – aaveg