AttributeError для длинных целых чисел для arccosh Нампи - PullRequest
0 голосов
/ 28 июня 2018

Я столкнулся с непредсказуемым AttributeError при использовании arccosh в Numpy. Вот это с Python 2:

>>> from numpy import arccosh
>>> arccosh(123456789012345678901)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'long' object has no attribute 'arccosh'

Я нашел похожую ошибку в Python 3.

Уменьшение числа помогает:

>>> arccosh(12345678901234567890)
44.65298496976247

Пока поплавки тоже работают:

>>> arccosh(10**20)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'arccosh'
>>> arccosh(10.**20)
46.74484904044086

Исключение также появляется для других функций, например, arcsinh, log10 и sin.

Полагаю, числа слишком длинные для numpy.uint64

>>> big = np.array([10**18], dtype=np.uint64)
>>> big = np.array([10**20], dtype=np.uint64)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long

и что Numpy не обрабатывает numpy.object.

>>> big = np.array([10**20], dtype=np.object)
>>> arccosh(big)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'arccosh'

Python's acosh в модуле math работает:

>>> from math import acosh
>>> acosh(10**20)
46.74484904044086

Я вижу здесь объяснение AttributeError: у объекта 'numpy.float64' нет атрибута 'log10' , поэтому, хотя ошибка объяснима, она немного удивительна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...