关于将float number减去int数组时关于autoupdate数组的Numpy问题

时间:2015-09-24 01:58:41

标签: python arrays numpy

您好我试图为Numpy 2D数组上的整列减去一个数字,并将结果值放入同一列,但是当减去的数字为float且数组列为整数时,似乎是Numpy将减法的resut转换为int然后更新它。为什么会这样?

减去整数

In [1]: a = np.array([[1,2],[2,3],[3,4]])

In [2]: a[:,1] - 1
Out[2]: array([1, 2, 3])       # <-- OK!

In [3]: a[:,1] = a[:,1] - 1    # <-- auto-update the array column

In [4]: a
Out[4]:
array([[1, 1],
       [2, 2],
       [3, 3]])                # <-- OK!

减去浮点数

In [1]: a = np.array([[1,2],[2,3],[3,4]])

In [2]: a[:,1] - 0.5
Out[2]: array([ 1.5,  2.5,  3.5])   # <-- seems to be ok

In [3]: a[:,1] = a[:,1] - 0.5       # <-- auto-update the array column

In [4]: a
Out[4]:
array([[1, 1],
       [2, 2],
       [3, 3]])                     # <-- same result a[:,1] = a[:,1] - 1

1 个答案:

答案 0 :(得分:2)

NumPy数组具有固定的数据类型(dtype),如果您没有自己指定,则可以从初始化数据中推断出来。除非你告诉它,它不会改变,所以在你的第一个案例中:

a[:,1] - 0.5

你没关系,因为你创建了一个新数组,其中包含了一个新的float dtype,必要时会从计算中推断出来(原来的a不会更改。)在你的第二,您实际上是在尝试更改a中的值,这是一个整数数组,因此计算结果会转换为整数:例如,int(2-0.5)1

要对数组执行浮点运算,请使用float将其快速转换为astype

In [32]: a.astype('float') - 0.5
Out[32]: 
array([[ 0.5,  1.5],
       [ 1.5,  2.5],
       [ 2.5,  3.5]])