唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

Pythonで組み合わせ(Combination)を計算

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.])