如何在Numpy中取一个长对数

时间:2016-02-29 16:58:30

标签: python numpy

我需要取一个非常大的数字(long类型)的对数。

from scipy import misc
from numpy import log

n1 = 40000
k1 = 20000
r = log(misc.comb(n1, k1, exact=True))

引发

  

AttributeError:'long'对象没有属性'log'

如果我尝试转换为float

  

*** OverflowError:long int太大而无法转换为float

知道位数也是合适的。我注意到long内置了bit_length(),但我不确定这是如何转化为数字位数的。谢谢!

2 个答案:

答案 0 :(得分:2)

使用math.log代替numpy.log

from scipy import misc
import math

n1 = 40000
k1 = 20000
r = math.log(misc.comb(n1, k1, exact=True),10)

它应该给12038.800733910726你可以围绕。

答案 1 :(得分:0)

n=misc.comb(n1, k1, exact=True)是一个非常大的数字,因此无法转换为float。 len(str(n))给出小数位数:12039。

您还可以按r.bit_length()/log2(10)=12039.09

找到位数