人工知能エンジニア修行日記

主に人工知能、機械学習、深層学習、Python、数学について覚え書きを記します

『Pythonからはじめる数学入門』5章 集合と確率を操作する

f:id:kaeken:20171204234713p:plainPythonからはじめる数学入門』

5章 集合と確率を操作する

の解説です。

5.1 集合とは何か

集合(set)、要素(element)といったキーワードの意味は、高校数学で出てきていますのでここでは省略します。

以下、Pythonで集合の演算方法をみていきます。

5.1.1 集合の構成

まず、集合は、sympyのFiniteSetをimportして構成します。

from sympy import FiniteSet
s = FiniteSet(2,4,6)
print(s)

結果

{2, 4, 6}
# {} は集合を意味します

集合は、さまざまな要素をもつことができ、要素の個数は、len()で求められます。

from sympy import FiniteSet
from fractions import Fraction
s = FiniteSet(1,1.5, Fraction(1,5)) # さまざな数を要素にもてる
print(s)
print(len(s)) # 集合の濃度(cardinality)=要素の個数は、len()で求める

結果

{1/5, 1, 1.5}
3

集合の要素かどうかの判定方法は、in でチェックできます。

#5.1.1.1 要素判定

print(1 in s)
print(4 in s)

結果

True
False

また、空集合をつくる方法です。

#5.1.1.2 空集合を作る

s = FiniteSet()
s

結果

EmptySet()

リストやタプルから集合を作る場合は、可変長引数として渡します。

#5.1.1.3 リストやタプルから集合を作る

members = [1,2,3]
s = FiniteSet(*members) #*:可変長引数
s

結果

{1, 2, 3}

集合要素の重複は、取り除かれます。

#5.1.1.4 集合要素の重複と順序

from sympy import FiniteSet
members = [1,2,3,2]
FiniteSet(*members)

結果

{1, 2, 3}

また、順序は、一定になるとは限りません。

from sympy import FiniteSet
s = FiniteSet(1,2,3)
for member in s:
  print(member)

結果

1
2
3

集合が等しいかは、==で比較します。

from sympy import FiniteSet
s = FiniteSet(3,4,5)
t = FiniteSet(3,4,5)
s == t

結果

True

5.1.2 部分集合、上位集合、べき集合

一方の集合Aが、他方の集合Bに含まれる場合は、AはBの部分集合subsetといい、

その逆からみれば、BはAの上位集合supersetといいます。

また、完全に含まれている場合は、真部分集合proper subsetといい、逆は真上位集合proper supersetといいます。

#5.1.2 部分集合、上位集合、べき集合

s = FiniteSet(1)
t = FiniteSet(1,2)
print('subset')
print(s.is_subset(t))
print(t.is_subset(s))
print(s.is_subset(s))
print(t.is_subset(t))
print('superset')
print(s.is_superset(t))
print(t.is_superset(s))
print(s.is_superset(s))
print(t.is_superset(t))
print('proper_subset')
print(s.is_proper_subset(t))
print(t.is_proper_subset(s))
print(s.is_proper_subset(s))
print(t.is_proper_subset(t))
print('proper_superset')
print(s.is_proper_superset(t))
print(t.is_proper_superset(s))
print(s.is_proper_superset(s))
print(t.is_proper_superset(t))

結果

subset
True
False
True
True
superset
False
True
True
True
proper_subset
True
False
False
False
proper_superset
False
True
False
False

集合sのべき集合power setとは、sのすべての部分集合の集合を意味します。

s = FiniteSet(1,2,3)
ps = s.powerset()
print(ps)
print(len(ps))

結果

{EmptySet(), {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}
8

5.1.3 集合演算

2つの集合の和union、積intersection、直積Cartesian productの演算は以下の通りです。

from sympy import FiniteSet
s = FiniteSet(1,3)
t = FiniteSet(3,6)
print('union')
print(s.union(t))
print('intersect')
print(s.intersect(t))
print('Cartesian product')
print(s*t)
for elem in s*t:
  print(elem)
print(s**3)
for elem in s**3:
  print(elem)

結果

union
{1, 3, 6}
intersect
{3}
Cartesian product
{1, 3} x {3, 6}
(1, 3)
(1, 6)
(3, 3)
(3, 6)
{1, 3} x {1, 3} x {1, 3}
(1, 1, 1)
(1, 1, 3)
(1, 3, 1)
(1, 3, 3)
(3, 1, 1)
(3, 1, 3)
(3, 3, 1)
(3, 3, 3)

5.2 確率

5.2.1 事象Aまたは事象Bの確率

5.2.2 事象Aおよび事象Bの確率

5.2.3 乱数生成

5.2.4 非一様乱数