Подтвердить что ты не робот

Python + numpy: почему numpy.log выдает ошибку атрибута, если его операнд слишком велик?

Выполнение

np.log(math.factorial(21))

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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