簡體   English   中英

python log n選擇k

[英]python log n choose k

scipy.misc.comb,返回n選擇k,是使用gammaln函數實現的。 是否有一個保留在日志空間的函數? 我看到沒有scipy.misc.combln或任何類似的。 實現自己是微不足道的,但如果它已經在某個地方的包中會很方便。 我沒有在scipy.misc中看到它,轉換到普通空間然后返回日志感覺很浪費。

看一下源代碼 ,看起來你是對的,它實現起來是微不足道的,但它很可能沒有在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)

可以使用gammaln ,但是當N >> k時,減法會丟失精度。 這可以通過與beta函數的關系來避免:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM