Я столкнулся с непредсказуемым 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' , поэтому, хотя ошибка объяснима, она немного удивительна.