Pythonで組み合わせの総数を計算する関数がなかったので調べてみた.
itertools.combinationsは総数を計算するときには使えません.
再帰で計算すると大きな数の時にスタックの最大数を超えてしまってダメ.
scipy.misc.comb
scipyにscipy.misc.combがあるのでこれを使用してみます.
第三引数(exact)を与えないか0を指定したときには返り値は浮動小数点になります.
第三引数に0以外の値を指定することで正確な値を得ることができます.
>>>import scipy.misc as scm >>>scm.comb(1000000, 10) array(2.7556079131047227e+53) >>>scm.comb(1000000, 10, 1) 275560791685954185974226391830832142533978457499900000L
また浮動小数点の時のみ引数にnumpy.arrayを取ることができます.
>>>import numpy as np >>>import scipy.misc as scm >>> n = np.array([10, 10]) >>> k = np.array([3, 4]) >>>scm.comb(n, k) array([ 120., 210.])