Ответ 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
.