1. 当向一个numpy int型array 减去 一个float数的时候,不会自动类型更新。
    示例:
subtracting float number

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


原因:

NumPy arrays have a fixed datatype (dtype) which is inferred from the initialization data if you don't specify it yourself. It won't change unless you tell it to, so in your first case:

​a[:,1] - 0.5​

you're OK because you create a new array with a new, ​​float​​ ​​dtype​​ inferred as necessary from the calculation(the original a is not changed.) In your second, you are actually trying to change the values in ​​a​​, which is an integer array, so the result of the calculation is cast to an integer: ​​int(2-0.5)​​ is ​​1​​, for example.

To do float arithmetic on your array, upcast it to float explicitly with astype: (解决方案:​​.astype('float')​​)

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