LoginSignup
254
291

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-07-08

はじめに

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

254
291
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
254
291