我试图在函数中创建一小部分阶乘。此分数包含大数字,因此我使用Decimal
传递它们,我有两个列表r
和n
我首先转换为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))))
答案 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]