確率組み合わせ論の基本である「組み合わせ」は、Pythonで簡単に計算することができます。
本記事では、そんなPython基礎となる組み合わせの計算について、詳しくご説明します。
組み合わせ
組み合わせ(combination)は、異なる\(n\)個の中から\(k\)個を選択したときの組み合わせ数のことです。
並び順を考慮しない点が、順列との違いになります。
組み合わせは、下式で表されます。
\(C\left( n,k\right) =\dfrac{n!}{k!\left( n-k\right) !}\)
以下に、Pythonを使用した組み合わせの計算方法をご紹介します。
組み合わせ関数の実装
組み合わせ関数の実装例を以下にご紹介します。
分数を表現できる、fractionsモジュールのFraction()関数を使用してみます。
#input
from fractions import Fraction as F
def C(n, k):
if n < 0 or k <0:
x = 0
else:
x = 1
for a in range(1,k+1):
x = x * F(n-a+1,a)
return x
print("C(6,3)={}".format(C(6,3)))
print("C(10,3)={}".format(C(10,3)))
#output
C(6,3)=20
C(10,3)=120
scipy.special.comb()
SciPyのscipy.special.comb()を使用すると、第一引数に指定した\(n\)および第二引数に指定した\(k\)の組み合わせを計算することができます。
第三引数はオプション(exact)ですが、Trueにすると正確な値を計算することが可能です。(デフォルト(False)はfloat型の近似値です。)
#input
from scipy import special as sp
c1 = sp.comb(10,5)
c2 = sp.comb(100,50)
c3 = sp.comb(100,50,exact=True)
print("C(10,5,False)={}".format(c1))
print("C(100,50,False)={}".format(c2))
print("C(100,50,True)={}".format(c3))
#output
C(10,5,False)=252.0
C(100,50,False)=1.0089134454556415e+29
C(100,50,True)=100891344545564193334812497256
itertools.combinations()
itertoolsモジュールのitertools.combinations()を使用すると、イテレータとして組み合わせを生成することができます。
第一引数にイテラブルオブジェクトを、第二引数に選択個数\(k\)を指定します。
#input
from itertools import combinations as comb
fluits = ["apple","orange","peach"]
C = comb(fluits,2)
print("apple,orange,peachから2個選ぶ組み合わせ:\n{}".format(list(C)))
#output
apple,orange,peachから2個選ぶ組み合わせ:
[('apple', 'orange'), ('apple', 'peach'), ('orange', 'peach')]
まとめ
この記事では、Python基礎となる組み合わせの計算方法について、ご説明しました。
本記事を参考に、ぜひ色々と試してみてください。
参考
Python学習用おすすめ教材
Pythonの基本を学びたい方向け
統計学基礎を学びたい方向け
Pythonの統計解析を学びたい方向け
おすすめプログラミングスクール
Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。
私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。
現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。
無料体験ができますので、まずは試してみてください!