为什么 numpy 不能计算长对象?
why can't numpy compute long objects?
假设我有一个分配了类型 'long'
的变量
x = 40*2*10**30
如果我随后尝试使用 numpy(导入为 np)获取此变量的日志:
np.log10(x)
我遇到属性错误:
'long' object has no attribute 'log10'.
为了解决这个问题,我可以将变量设置为浮点数,它工作得很好,或者使用 'math' 包:
math.log10(x)
np.log10(float(x))
我的问题是:math.log10 和 np.log10 有何不同,为什么 np 没有设置为处理 'long' 类型?
问题在于 numpy 是用 C 编写的,它没有可以处理与常规 python int class 一样大的数字的数据类型。如果你去这里:http://docs.scipy.org/doc/numpy/user/basics.types.html 它解释了 numpy 中允许的不同数据类型。请特别注意 int64 dtype,该类型允许的最大数字远小于您输入的整数。但是 float64(相当于 C 中的 double)最多可以处理 11 位指数,这就是为什么当您转换为 float 时没有溢出错误。
假设我有一个分配了类型 'long'
的变量x = 40*2*10**30
如果我随后尝试使用 numpy(导入为 np)获取此变量的日志:
np.log10(x)
我遇到属性错误:
'long' object has no attribute 'log10'.
为了解决这个问题,我可以将变量设置为浮点数,它工作得很好,或者使用 'math' 包:
math.log10(x)
np.log10(float(x))
我的问题是:math.log10 和 np.log10 有何不同,为什么 np 没有设置为处理 'long' 类型?
问题在于 numpy 是用 C 编写的,它没有可以处理与常规 python int class 一样大的数字的数据类型。如果你去这里:http://docs.scipy.org/doc/numpy/user/basics.types.html 它解释了 numpy 中允许的不同数据类型。请特别注意 int64 dtype,该类型允许的最大数字远小于您输入的整数。但是 float64(相当于 C 中的 double)最多可以处理 11 位指数,这就是为什么当您转换为 float 时没有溢出错误。