Python:使用十进制

时间:2016-03-04 16:14:58

标签: python numpy scipy

我试图在函数中创建一小部分阶乘。此分数包含大数字,因此我使用Decimal传递它们,我有两个列表rn我首先转换为np.array并使用{{1} } for factorial并尝试使用Decimal强制计算。

将scipy.misc导入为scM

scipy.misc.factorial

但是我收到以下错误:

def LRT(r,n):
     return Decimal(scM.factorial(np.array(n)))/Decimal(scM.factorial(np.array(r)))

错误是合乎逻辑的,但我不知道如何使用所有这些限制来执行计算

编辑:我使用scipy.minimize对此功能进行一些优化。当我尝试@zondo建议:

    TypeError: Cannot convert array([ inf,  inf,  inf,  inf,  inf]) to Decimal

我收到以下错误:

return np.array(map(Decimal, (scM.factorial(np.array(n)))))/np.array(map(Decimal, (scM.factorial(np.array(r)-1))))

1 个答案:

答案 0 :(得分:1)

我猜你的值太大了,不适合numpy.float64格式。让:

var expressionIGet = MapFoo.AddCollectionMap(MapBar, "Bars");

然后:

n,r=nr=randint(0,1000,(2,10))   

如果是问题,所有计算必须使用Decimal模块完成:

In [7]: scM.factorial(n)
Out[7]: 
array([              inf,               inf,               inf,
                     inf,   1.40500612e+051,               inf,
         2.48091408e+109,               inf,               inf,
         1.14628056e+170])

然后:

maxi=nr.max()+1
fact=empty(maxi,object)
fact[0]=Decimal(1) 
for i in range(1,maxi) :fact[i]=fact[i-1]*i
res = fact[n]/fact[r]