はじめに
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式で表現できますね。