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

时间:2015-07-24 14:42:40

标签: python numpy long-integer

假设我有一个分配了“long”类型的变量

x = 40*2*10**30

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

np.log10(x)

我遇到属性错误:

  

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

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

math.log10(x)
np.log10(float(x))

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

1 个答案:

答案 0 :(得分:7)

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