python 整除的数组_numpy的阵列整数/浮点除法

  • Post author:
  • Post category:python


I found the following behaviour in Python/numpy somewhat strange:

In [51]: a = np.arange(10, 20)

In [52]: a = a / 10.0

In [53]: a

Out[53]: array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])

In [54]: a = np.arange(10, 20)

In [55]: a /= 10.0

In [56]: a

Out[56]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

I felt that a=a/10.0 and a/=10.0 should return the same result. Is this inteded and documented somewhere?

解决方案

The problem with a /= 10.0 is that it modifies the array in place, and it won’t change the the dtype of the array, so all the floats are converted to integers. On the other hand a = a / 10.0 created a new array, and the type can be changed if a new array is being created.

From docs:

Note that assignments may result in changes if assigning higher types

to lower types (like floats to ints) or even exceptions (assigning

complex to floats or ints):