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的“污染”,但我认为这不会影响您的答案。