python+numpy: why does numpy.log throw an attribute error if its operand is too big?

后端 未结 2 1146
失恋的感觉
失恋的感觉 2020-12-03 17:08

Running

np.log(math.factorial(21))

throws an AttributeError: log. Why is that? I could imagine a ValueError, or

2条回答
  •  有刺的猬
    2020-12-03 17:34

    The result of math.factorial(21) is a Python long. numpy cannot convert it to one of its numeric types, so it leaves it as dtype=object. The way that unary ufuncs work for object arrays is that they simply try to call a method of the same name on the object. E.g.

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

    Since there is no .log() method on a Python long, you get the AttributeError.

提交回复
热议问题