何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『ゼロから作るDeep Learning 2』に査読者として名前が載りました

わざわざ言うことなのか...

2018年7月21日にオライリージャパンから『ゼロから作るDeep Learning 2』が発売される。

www.oreilly.co.jp

この本はオライリージャパンのWebサイト上で公開レビューを行っていた。

O'Reilly Village/オラの村 - 『ゼロから作るDeep Learning ❷』公開レビューのお知らせ

O'Reilly Village/オラの村 - 『ゼロから作るDeep Learning ❷』公開レビュー終了のお知らせ

勢いで公開レビューに参加したものの、他にたくさんのやる気あるレビュアーが参戦していたため、別に自分が頑張らなくてもいいかな、と思い最初の章のいくつかの誤植を指摘して別の本のレビューを始めてしまった。 そのため、謝辞に名前が出るほどの貢献はしていないし、わざわざブログエントリを書くほどではないのだが、せっかくなので記録としてここに残しておく。 自分の天邪鬼な性格を改めて感じたのであった。

オンライン整数列大辞典に掲載されている数列をPythonで生成したい #1

それ、Pythonで簡単にできるよ?と言いたかった。

6月は仕事が忙しくて怪文書ブログエントリを書くことができなかった。 7月もなぜか忙しく、このままだと離れてしまうので最近思いついたことを書いてみる。

オンライン整数列大辞典(On-Line Encyclopedia of Integer Sequences, OEIS)とは整数列のデータベースである。 掲載数は30万を超える。 例えば、データベースの1番目A000001は位数 nの群の個数の列である。

各数列の項目の中には、MathematicaMaple、PARI、MAGMA、Sage Mathによる生成方法も掲載されている(すべての項目に掲載されているかどうかは不明)。 とはいえ、これらの専門家向けツールを使わずともPythonやSymPyがあればある程度は作れるのではないだろうか。

そこで、オンライン整数列大辞典のリスト - Wikipediaにあるぐらいの数列をPythonやSymPyで書いてみよう、というのがこのエントリの趣旨である。

A000005: 約数の個数

約数の個数を数えるにはSymPyのdivisor_countを使えば簡単にできる。 内部の実装では素因数分解を利用しているため、大きい整数を与えるとかなり時間がかかると思われる。

from sympy import divisor_count

divisors = [divisor_count(n) for n in range(1, 201)]
divisors[:20]
[1, 2, 2, 3, 2, 4, 2, 4, 3, 4, 2, 6, 2, 4, 4, 5, 2, 6, 2, 6]

A000010: Eulerのトーシェント函数

Eulerのトーシェント函数 \phi(n)とは1から nまでの整数の中で nと互いに素である数(トーシェントと呼ぶ)の総数である。 素数ならば、 \phi(p) = p-1であり、 n素因数分解が与えられていれば簡単に計算できる。 SymPyには函数totientが用意されているので、これを使えば簡単にできる。 内部の実装ではやはり素因数分解を利用しているため、大きい整数を与えるとかなり時間がかかると思われる。

from sympy.ntheory import totient

num_of_totients = [totient(n) for n in range(1, 201)]
num_of_totients[:20]
[1, 1, 2, 2, 4, 2, 6, 4, 6, 4, 10, 4, 12, 6, 8, 8, 16, 6, 18, 8]

『Pythonデータサイエンスハンドブック』の査読を担当しました

そばに置いておきたい便利な本

2018年5月26日にオライリージャパンから『Python Data Science Handbook』の邦訳『Pythonデータサイエンスハンドブック』が発売される。 この度、邦訳の査読者として参加させていただいた。 オライリーの方から話があったのは2018年3月下旬であった。

www.oreilly.co.jp

Pythonのデータサイエンスのエコシステムを構成するライブラリであるJupyter、NumPy、pandas、Matplotlib、scikit-learnを1冊でカバーしている。 読んで感じたことはNumPy独自のインデックスの使い方、pandasのNumPyを補完するようなインデックスの使い方を習得することがエコシステムを活用する肝となることである。 これらのインデックスの取り扱いをマスターすることがPythonでデータサイエンスを行うために必須である。

本文中に時折筆者の遊び心が入っている。 モンティパイソンのメンバーが題材として入っているのがちょっと嬉しかった。 訳注として「テリー・ギリアムのみアメリカ出身」というのを入れたが、もっと言うとそれ以外のイギリス出身のメンバーの中でもテリー・ジョーンズウェールズ出身でその他の4人はイングランド出身、というのも小ネタとして知っておいてほしい。