何かを書き留める何か

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

『Effective Python 読書会 #3』を開催しました

単調減少の恐怖

去る2016年5月28日に品川区立五反田文化センターにて『Effective Python 読書会 #3』を開催しました。 前回同様(会議室のキャパシティである)18人規模で開催し、10名の参加者でした。 発表者枠の無断キャンセルはさすがにつらい…。

項目25「親クラスをsuperを使って初期化する」について

『Effective Python』の項目25のP.71L.-5に次のような記述がある。

MROは、どのスーパークラスが他より前に(例えば、深さ優先、左から右)初期化されるかを標準化しました。 さらに、ダイヤモンド継承の共通のスーパークラスが一度しか実行されないことを保証しました。

ここで、「深さ優先、左から右」とあるが、違うのではという話になり、調べたところMROはC3 linearizationというアルゴリズムで規定されているみたいです。

C3 linearization - Wikipedia, the free encyclopedia

つまり、

(例えば、深さ優先、左から右)

という記述は本当にたとえ話であり、アルゴリズムで一意に決まっているよ、という話に過ぎないという点です。

最も、項目26「多重継承はmix-inユーティリティクラスだけに使う」P.74 L.1に

Pythonは、多重継承を使いやすくする組み込み機能を備えたオブジェクト指向言語です(中略)。しかし、多重継承はそもそも避けた方が賢明です。

とある通り、筆者は多重継承はmix-inのみに限定した方がよいと主張しています。 (項目25は組み込み函数superの効用を主張している)

次回予定

次回も五反田文化センターで5月28日18時から開催します。

pythonbookreading.connpass.com

3章の続きと4章を読み進める予定です。 ペースメーカーとして、理解が正しいかどうかのリトマス紙として、ご利用ください。

追記

筆者であるBrettさんからTwitterでリプライが届き、表記を変更するよ、というコメントをいただいました。

github.com

項目25で重要なのは

The only things that are important here are 1) that there's a standardized ordering, and 2) that superclasses are only initialized once.

の通り、

  1. MROの順序は標準化されている
  2. スーパークラスは1度のみ初期化される

です。

Pythonで巡る線型代数:準備篇

「はじめに」の前に

これは以下のプロポーサルに沿ったエントリ(の予定です)

pycon.jp

はじめに

線型代数学は、数学のもっとも古い分野の一つでありながら、またもっとも新しいものの一つに数えられる。

Bourbaki『数学史』

線型代数は現代数学の基礎をなす分野であり、統計学機械学習などに応用されるなど理工系の学問にとって必須の教養である。 一方で、微積分学を到達点とする高等学校までの数学と線型代数は趣が異なりよくわらなないまま終わってしまったという方も多い。 線型代数を理解すべくPythonや数式処理ライブラリSympyを駆使して線型代数の教科書を読破する方法を探る。

準備

ソフトウェア

必要なソフトウェアは次の通り。

  1. Python 3 https://www.python.org/downloads/

  2. SymPy pip install sympy

教科書

日本語で書かれた線型代数の教科書は数多くあるが、定評があるのは概ね次の3冊である。

  1. 佐武一郎『線型代数学』裳華房 1958年

<書籍紹介> 線型代数学(新装版)(佐武一郎 著)【数学】

  1. 齋藤正彦『線型代数入門』東京大学出版会 1966年

書籍一覧・検索 » 線型代数入門 - 東京大学出版会

  1. 谷川浩司線型代数 改訂版』日本評論社 2015年

線型代数[改訂版]|日本評論社

偏見であるが、よくある線型代数の教科書は『線型代数入門』から抜粋して体を実数体に制限したものが多い。 そして『線型代数入門』は『線型代数学』を参考に工学的な視点を加味したもの、と認識している。

私が学部生の時に読んだのが佐武一郎『線型代数学』である。 同じ本を読んでも仕方ないので、今回は長谷川浩司線型代数 改訂版』を題材にして読み進めてみる。