はじめに
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,combinationsは itertools で定義されている関数です。
| 意味 | 数式 | 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式で表現しようとするとしんどいですね。
product は frozenset に限らず iterable なオブジェクトにも適用可能なので、結構使えます。
定数
pi, e は math で定義されている値です。
| 意味 | 数式 | 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, g は float 型の値を返す関数、 m は0以上の int 型の値、 x, y は float 型の値、 z は complex 型の値を表すとします。
注意
-
reduceは functools で定義されている関数です。 -
mulは operator で定義されている関数です。 -
factorial,ceil,floorは math で定義されている関数です。
| 意味 | 数式 | 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式で表現できますね。