Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
296
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
296
Help us understand the problem. What are the problem?