为什么不能numpy计算长对象?

LRP*_*LRP 7 python numpy long-integer

假设我有一个赋值为'long'的变量

x = 40*2*10**30
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试使用numpy(导入为np)获取此变量的日志:

np.log10(x)
Run Code Online (Sandbox Code Playgroud)

我遇到属性错误:

'long'对象没有属性'log10'.

为了解决这个问题,我可以将变量设置为float并且它可以正常工作或使用'math'包:

math.log10(x)
np.log10(float(x))
Run Code Online (Sandbox Code Playgroud)

我的问题是:math.log10和np.log10有何不同,为什么没有设置np来处理'long'类型?

jfi*_*003 8

问题是numpy是用C编写的,它没有一个数据类型可以处理与常规python int类一样大的数字.如果你去这里:http://docs.scipy.org/doc/numpy/user/basics.types.html 它解释了numpy中允许的不同数据类型.特别注意int64 dtype,该类型中允许的最大数字远小于您输入的整数.但是,float64(相当于C中的double)最多可以处理11位指数,这就是为什么当你转换为float时没有溢出错误.