【Python入門】組み合わせの計算|combinations()関数を学ぶ

組み合わせの計算|combinations()関数を学ぶ_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

確率組み合わせ論の基本である「組み合わせ」は、Pythonで簡単に計算することができます。

本記事では、そんなPython基礎となる組み合わせの計算について、詳しくご説明します。

こんな人に読んでほしい
  • Python初心者の人
  • Pythonによる組み合わせの計算方法について学びたい人
levtech-ad

組み合わせ

組み合わせ(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(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました