Python 为什么超验的numpy会给予;“无属性”;大于2^64-1的整数参数出错?

Python 为什么超验的numpy会给予;“无属性”;大于2^64-1的整数参数出错?,python,python-3.x,numpy,Python,Python 3.x,Numpy,奇怪的是,np.log(2**64-1)返回浮点44.3614196 但是np.log(2**64)返回 Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'int' object has no attribute 'log' 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 AttributeError:“int”对象没有属性“log”

奇怪的是,
np.log(2**64-1)
返回浮点44.3614196

但是
np.log(2**64)
返回

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'log' 
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“int”对象没有属性“log”
问题:

  • 为什么numpy对大于2^64-1的争论犹豫不决
  • 为什么错误
    AttributeError
    不是对参数大小的抱怨

仅供参考:对于其他numpy超越函数(
sqrt
log10
cos
…)

numpy没有足够大的本机整数数据类型来容纳
2**64
,因此它得到
对象
数据类型处理
object
numpy.log的数据类型处理是在对象上查找
log
方法并调用它,这就是
AttributeError
的来源。

查看
np.array(2**64)
。可能是对象数据类型。您正在使用Py2,对吗?顺便说一句,您在文章中似乎混淆了一些Python2和Python3的行为。在
2**31
long
的任何设置中,
np.log(2**64)
中的
AttributeError
应该说
'long'
而不是
@user2357112是的,我在这两种情况下都进行了测试,可能已经这样做了,我只将问题转换为Py3。@hpaulj同上。
math
mpmath
将处理较大的整数-但不是
numpy
数组。我明白了,谢谢!在任何情况下,numpy超越函数都会在一个自然的数值对象上找到一个方法吗?这对我来说很新鲜,我正试图从中尽可能多地理解。@uhoh:取决于你考虑的函数和“自然”数值对象。例如,
decimal.decimal
对象支持一些方法,如
exp
log10
,它们将查找
numpy.exp
numpy.log10
。我刚刚调整了这个问题以消除Py2的“污染”,但我认为这不会影响您的答案。