2014-02-13 44 views
1

scipy.misc.comb,返回n选择k,使用gammaln函数实现。有没有一个功能停留在日志空间?我看到没有scipy.misc.combln或任何类似的。实现我自己是微不足道的,但如果它已经在某个包中,它会很方便。我没有在scipy.misc中看到它,只是转换到正常空间然后回到日志才感到浪费。python log n选择k

回答

2

看着the source code,看起来你是对的,它实现起来微不足道,但它可能不会在scipy的其他地方实现。从好的一面来说,有一些错误检查正在进行,所以如果你在其他地方做这些检查,你可以消除一些检查(这与删除指数相似)。如果你知道你总是给0 <= k <= N,以及每个kN作为一个数组,那么它已经降到了:

from scipy import special 

    def chooseln(N, k) 
     return special.gammaln(N+1) - special.gammaln(N-k+1) - special.gammaln(k+1) 
0

它可以使用gammaln,但精度在减法时N >> k丢失。 这可以通过相对于β函数来避免:

from numpy import log 
from scipy.special import betaln 

def binomln(n, k): 
    # Assumes binom(n, k) >= 0 
    return -betaln(1 + n - k, 1 + k) - log(n + 1) 
+0

似乎betaln的在FORTRAN的实现执行准确的GAMMALN充当上面给出的相同的减法。我错过了什么吗? – hawkjo

+0

是的。 Scipy的实现在C中 –

相关问题