在Numpy中使用AttributeError
时遇到了意外的arccosh
。这就是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 acosh
模块中的math
可以正常工作:
>>> from math import acosh
>>> acosh(10**20)
46.74484904044086
我在这里AttributeError: 'numpy.float64' object has no attribute 'log10'看到了一个解释,所以尽管错误是可以解释的,但还是有些令人惊讶。