Неправильное приведение к int32? ожидая вместо uint16? - PullRequest
0 голосов
/ 17 марта 2020

Почему во втором случае numpy делает неправильное приведение к int32 ?? Я должен использовать второй случай, потому что я использую переменную ..

In [24]: np.zeros(10,dtype=np.uint16) - 1
Out[24]: array([65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535], dtype=uint16)



In [23]: np.zeros(10,dtype=np.uint16) + (-1)
Out[23]: array([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], dtype=int32)

In [26]: np.zeros(10,dtype=np.uint16) + np.uint16(-1)
Out[26]: array([65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535], dtype=uint16)

1 Ответ

1 голос
/ 17 марта 2020

Это не обязательно неправильное приведение, numpy пытается найти наименьший тип, который может обработать все возможные результаты.

Вы можете узнать, какой тип является результатом будет с np.result_type:

np.result_type(np.uint16, -1)

>>> int32

np.result_type(np.uint16, 1)

>>> uint16

С np.zeros(10,dtype=np.uint16) + np.uint16(-1) результат будет uint16, и это то, что вам нужно сделать, чтобы форсировать неподписанный результат , В противном случае numpy будет предполагать, что результат должен быть приведен для обработки отрицательных значений.

...