18

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 intended and documented somewhere?

0

1 Answer 1

22

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):

Sign up to request clarification or add additional context in comments.

1 Comment

+1 for the great answer. Personally, when I tried to generate double floats, I always used np.arange(10., 20.) to be safe.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.