Подтвердить что ты не робот

Численное целочисленное/плавающее разделение

Я нашел следующее поведение в Python/numpy несколько странным:

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

Я чувствовал, что a=a/10.0 и a/=10.0 должны возвращать тот же результат. Является ли это документированным и документированным где-нибудь?

4b9b3361

Ответ 1

Проблема с a /= 10.0 заключается в том, что она изменяет массив на месте и не изменяет dtype массива, поэтому все поплавки преобразуются в целые числа. С другой стороны, a = a / 10.0 создал новый массив, и тип может быть изменен, если создается новый массив.

От docs:

Обратите внимание, что присвоения могут приводить к изменениям при назначении более высоких типов для более низких типов (например, float to ints) или даже исключений (присвоение сложный для float или ints):