python + numpy: почему numpy.log выдает ошибку атрибута, если его операнд слишком большой? - PullRequest
25 голосов
/ 17 мая 2011

Бег

np.log(math.factorial(21))

бросает AttributeError: log. Это почему? Я мог бы представить ValueError или что-то вроде UseYourHighSchoolMathsError, но почему ошибка атрибута?

Ответы [ 2 ]

30 голосов
/ 18 мая 2011

Результатом math.factorial(21) является длина Python.Numpy не может преобразовать его в один из числовых типов, поэтому он оставляет его как dtype=object.Способ, которым унарные уфунки работают с массивами объектов, заключается в том, что они просто пытаются вызвать метод с тем же именем для объекта.Например,

np.log(np.array([x], dtype=object)) <-> np.array([x.log()], dtype=object)

Поскольку в Python нет метода .log(), вы получите AttributeError.

5 голосов
/ 05 марта 2012

Предпочитает функцию math.log(), которая выполняет работу даже с длинными целыми числами.

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