Кастинг Python из long при добавлении в массив numpy - PullRequest
0 голосов
/ 05 декабря 2018

Почему Python не приводит длинные числа к пустым числам при выполнении sth.как

a = np.array([10.0, 56.0]) + long(10**47)

Тип переменной a равен object.Я не ожидал этого, когда во время задачи оптимизации максимального правдоподобия один параметр подгонки B был целым числом и, следовательно, 10 ** B стал длинным.

Это из-за страха потери точности?

1 Ответ

0 голосов
/ 05 декабря 2018

Я подозреваю, что это связано с тем, что python может хранить произвольно длинные целые числа, и numpy понимает, что он не может безопасно привести результат к известному типу данных.Следовательно, он возвращается к обработке массива как массива объектов Python и поэлементно умножается с использованием правил Python (которые приводятся к числу с плавающей запятой).

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

>>> np.result_type(np.array([10.0, 56.0],long(10**47))
dtype('O')

На основании документации для np.result_type происходит:

Сначала np.min_scalar_type() вызывается на каждом из входов:

>>> np.min_scalar_type(np.array([10.0, 56.0]))
dtype('float64')
>>> np.min_scalar_type(long(10**47))
dtype('O')

Во-вторых, результат определяется путем объединения этих типов с использованием np.promote_types:

>>> np.promote_types(np.float64,np.dtype('O'))
dtype('O')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...