scipy.misc.comb,返回n选择k,使用gammaln函数实现。有没有一个功能停留在日志空间?我看到没有scipy.misc.combln或任何类似的。实现我自己是微不足道的,但如果它已经在某个包中,它会很方便。我没有在scipy.misc中看到它,只是转换到正常空间然后回到日志才感到浪费。python log n选择k
1
A
回答
2
看着the source code,看起来你是对的,它实现起来微不足道,但它可能不会在scipy的其他地方实现。从好的一面来说,有一些错误检查正在进行,所以如果你在其他地方做这些检查,你可以消除一些检查(这与删除指数相似)。如果你知道你总是给0 <= k <= N
,以及每个k
,N
作为一个数组,那么它已经降到了:
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)
相关问题
- 1. 在k <n的算法运行时log(n)vs log(k)
- 2. 算法复杂度,log^k n vs n log n
- 3. 1概率N选择k
- 4. log(n!)=Ω(n * log(n))?
- 5. 是log(n!)= O((log(n))^ 2)?
- 6. Python SciPy n选择k的可能案例
- 7. 证明log(n!)是Ω(n log(n))
- 8. n在java中使用n和k的整数类型选择k
- 9. 增长率log(log * n)和log *(log n)哪个更快?
- 10. 将哈希表转换为O(log(k)* k + n)中的排序数组
- 11. 算法K-Way合并。这个解决方案是O(n log k)吗?
- 12. (log n)/(log(log n))的顺序是什么?
- 13. 在O(log n)中查找第k个最小元素
- 14. 如何将n个排序列表中的平均长度K排序为O(n * log K)时间?
- 15. 求解W(n)= W(n/2)+ n log n?
- 16. 在matlab中如何做(m,n,k)*(n,k)=(m,k)?
- 17. 显示n^2不是O(n * log(n))?
- 18. 复制关系:T(n/16)+ n log n
- 19. 复发T(n)= T(n - log(n))+ 1
- 20. n!实现以n^100为log N
- 21. 复发:T(n)= T(n/2)+ log N
- 22. n的高效计算在Node.js中选择k
- 23. 从MongoDB中选择满足N个条件的K个数据
- 24. 为什么此循环返回值为O(n log log n)而不是O(n log n)?
- 25. floor(√2n)的O(log log n)算法?
- 26. 从数据库中选择N个项目,但在ASP.NET MVC中只显示k(其中k <N)
- 27. 对于k << N
- 28. 从python中的N-K矩阵跨越K-uplets
- 29. 与log(n)相比,log(n^2)的大O是什么?
- 30. 返回列表[1,n,n^2,n^3,...,n^k]的函数powers(n,k),其中k是整数
似乎betaln的在FORTRAN的实现执行准确的GAMMALN充当上面给出的相同的减法。我错过了什么吗? – hawkjo
是的。 Scipy的实现在C中 –