就是高中数学的那个排列组合的组合,C。从 n 样东西里,取出 m 样,计算有几种取法
就是那个组合的 nCm
公式写出来就是 n!/( (n-m)!*m! )
然后我用 python 算了下,发现结果和其他语言算出来不一样
比如 n=64, n=32( 从 64 样里取出 32 个),用mathematica
来算,得到的结果是:
1832624140942590534
有兴趣可以访问wolframalpha 这里看看我输入的公式
而如果用 python 来算,无论是调用科学计算包scipy
还是直接自己写函数,算出的结果都是:
1832624140942590464
from scipy.special import comb
print("%d" % comb(64,32))
输出:1832624140942590464
如果自己实现计算函数的话也是算出来
1832624140942590464
有的搞不懂哪里出的问题
1
ayase252 2019-04-17 19:21:26 +08:00
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.special.comb.html
comb 有个默认为 false 的 extra 参数,会用浮点数去算,改成 true 就对了 |
2
wheeler 2019-04-17 19:22:04 +08:00
https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.comb.html#scipy.special.comb
Python 3.6.7 (default, Oct 22 2018, 11:32:17) [GCC 8.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from scipy.special import comb >>> comb(64,32, exact=True) 1832624140942590534 >>> |