嗨,我试图为Numpy 2D数组上的整个列减去一个数字,并将得到的值放入同一列,但是当减法数字是浮动的,数组列是整数时,Numpy似乎将减法的结果转换为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发布于 2015-09-24 13:49:31
NumPy数组有一个固定的数据类型(dtype),如果您不自己指定它,则从初始化数据推断它。除非你告诉它,否则它不会改变,所以在你的第一个例子中:
a[:,1] - 0.5您可以创建一个新数组,并根据需要从计算中推断出一个新的float dtype (原始a没有更改)。在第二个过程中,您实际上试图更改a中的值,这是一个整数数组,因此计算结果被转换为一个整数:例如,int(2-0.5)是1。
若要对数组执行浮点数运算,请使用astype显式地将其向上转换为astype。
In [32]: a.astype('float') - 0.5
Out[32]:
array([[ 0.5, 1.5],
[ 1.5, 2.5],
[ 2.5, 3.5]])https://stackoverflow.com/questions/32752177
复制相似问题