您好我试图为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
答案 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]])