数式とPython式の対応関係をまとめてみた


はじめに

Wikipediaの数学記号の表の一部をPython式で表現してみました。

標準ライブラリのみ用いて表現しています。

数式はよくわからんけど、Python式なら分かるって人もどうぞ。


記号論理

数式における $X$, $Y$ は命題、 $A$ は集合、 $P$ は述語を、

Python式における $X$, $Y$ は bool 型の値、 $A$ は iterable なオブジェクト、 $P$ は bool 型の値を返す関数を表すとします。

意味
数式
Python式

論理積
$X \land Y$
X and Y

論理和
$X \lor Y$
X or Y

論理否定
$\lnot X$
not X

論理包含
$X \Rightarrow Y$
not X or Y

全称限量記号
$\forall a \in A, P(a)$
all(P(a) for a in A)

存在限量記号
$\exists a \in A, P(a)$
any(P(a) for a in A)

all, any は組み込み関数で、結構便利です。


集合論

数式における $A$, $B$ は集合を、 $P$ は述語を、

Python式における $A$, $B$ は frozenset 型の値、 $P$ は bool 型の値を返す関数とします。

注意


  • Markdownのテーブル記法と衝突するため、 | で表現しています。


  • product, chain.from_iterable, combinationsitertools で定義されている関数です。

意味
数式
Python式

内包表記
$\{a \mid a \in A, P(a) \}$
frozenset(a for a in A if P(a))

元である
$a \in A$
a in A

元でない
$a \notin A$
a not in A

部分集合
$A \subseteq B$
A <= B

真部分集合
$A \subset B$
A < B

積集合
$A \cap B$
A & B

和集合
$A \cup B$
A | B

差集合
$A \setminus B$
A - B

べき集合
$2^{A}$
frozenset(frozenset(s for s in S if s) for S in product(*((None, a) for a in A)))

直積集合
$A \times B$
frozenset(product(A, B))

最大値
$\max{A}$
max(A)

最小値
$\min{A}$
min(A)

濃度
$ \mid A \mid$
len(A)

べき集合を扱うことはほとんどないと思いますが、Python式で表現しようとするとしんどいですね。

productfrozenset に限らず iterable なオブジェクトにも適用可能なので、結構使えます。


定数

pi, emath で定義されている値です。

意味
数式
Python式

0
$0$
$0$

1
$1$
$1$

円周率
$\pi$
pi

ネイピア数
$e$
e

虚数単位
$i$
1j

Pythonでは、複素数を 4+2j のように表せます。


代数学

数式における $n$ は自然数、 $A$ は集合, $f$ は $\mathbb{N} \rightarrow \mathbb{R}$ なる写像, $g$ は $A \rightarrow \mathbb{R}$ なる写像、

$m$ は非負の整数、 $x$, $y$ は実数、 $z$ は複素数、

Python式における n は1以上の int 型の値、 $A$ はiterableなオブジェクト、 f, gfloat 型の値を返す関数、 m は0以上の int 型の値、 x, yfloat 型の値、 zcomplex 型の値を表すとします。

注意



  • reducefunctools で定義されている関数です。


  • muloperator で定義されている関数です。


  • factorial, ceil, floormath で定義されている関数です。

意味
数式
Python式

総和
$\sum_{i=1}^{n} f(i)$
sum(f(i) for i in range(1, n + 1))

総和
$\sum_{a \in A} g(a)$
sum(g(a) for a in A)

総乗
$\prod_{i=1}^{n} f(i)$
reduce(mul, (f(i) for i in range(1, n + 1)))

総乗
$\prod_{a \in A} g(a)$
reduce(mul, (g(a) for x in A))

階乗
$m!$
factorial(m)

天井関数
$\lceil x \rceil $
ceil(x)

床関数
$\lfloor x \rfloor $
floor(x)

絶対値
$\mid x \mid $
abs(x)

実部
$\Re{z}$
z.real

虚部
$\Im{z}$
z.imag

指数
$x^y$
x**y

冪根
$\sqrt[m]{x}$
x**(1/m)

reduce(二項演算子, iterableなオブジェクト) は総乗に限らず、二項演算を繰り返し適用する際に便利です。


おわりに

標準ライブラリだけでも、多くの数式をきれいなPython式で表現できますね。