Can't use /= on numpy array

Tom Hale picture Tom Hale · Feb 23, 2018 · Viewed 10.9k times · Source

On a numpy array, why is it I can successfully use / 2:

>>> a=np.array([2, 4, 6])
>>> a = a / 2
>>> a
array([ 1.,  2.,  3.])

But I cannot use a /= 2?

>>> a=np.array([2, 4, 6])
>>> a /= 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide

I've seen numpy Issue 6464, but don't understand from reading it and the linked release notes the reason this doesn't work.

Is there any way to get /= to work as expected?

Answer

FlyingTeller picture FlyingTeller · Feb 23, 2018

As pointed out in the comment, the change from int (which is how a is created) to float (which is the result of /) is not allowed when using /=. To "fix" this the dtype of a just has to be a float from the beginning:

a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])