はじめに
最近、会社のゼミで行列プログラマーを読んでおり、4章を読了したので、感想を記事にする。
行列プログラマーとは、オライリーから出ている線形代数を学びつつpythonでコーディングする本である。
書いたコード
4章の演習問題を部分的に問いた。
所感
- 良い点:
オライリーから出ている本だからコーディングを中心にしているかと思いきや、数学理論の説明が多くて驚いた。
また、応用数学の本として行列を使った興味深い例を挙げていて非常に応用系の本としても面白い。
たとえば、符号理論におけるハミングコードや、ライツアウト、画像変換、グラフの隣接行列と、ユークリッド幾何の合同変換群を行列で表現など、
コンピューターグラフィック、アルゴリズム、情報理論に応用できる事例が多くて非常に良いと感じた。
また、演習問題が素晴らしい。
例えば、4章の問題18は行列の積によって、データ間の内積(正規化してないコサイン類似度)によって表現し、
行列を応用することで、簡易なレコメンドアルゴリズムをフルスクラッチで実装する。これは本当に良い問題だと思う。
- 個人的には微妙な点:
本書特有の行列・ベクトルクラスを作成するケースが多い。
確かにpythonの初心者やB1,B2の学生であれば、数値計算クラスの実装として良い問題だと感じる。
しかし、pythonを実務で使っているエンジニアやデータサイエンティストにとって、ライブラリとして既にnumpyや、scipyなど科学計算ライブラリがあるため、
あまり重要に感じない(もちろん大切だと思うが、そういうのって何回も自作した覚えがあって、今更やるのも辛みがすごい…)。
なので、この本の使い方として、個人的には、数値計算ライブラリを自作する部分は、numpy, scipyで対応する箇所を提示、存在しない場合は自作というスタンスが良いように感じる。
4章について
4章は行列についての章である。
以下を学ぶ
- 行列とは何かから始まり
- 行列の積、線形写像(本書では線形関数と書いてる)の性質
- 行列と線形写像(行列の積のモノイドと線形写像の合成の圏が、表現行列を求めることによって関手となり、可逆となること)
- kernelと線形写像,
- 逆行列
一番驚いたのは応用数学の本ならば行列のみをやるかと思いきや、線形写像にも言及しており、
さらに、線形写像と行列の本質である同型性、逆行列を行列の線形写像における逆写像の行列と定めていたこと。
なので、逆行列を正方行列だけでなく一般の列数行数についても定めており、正方行列におけるであればとなるが、 一般の矩形行列において、だがとならない例もあげている。
また、演習問題4.17.18がマジで素晴らしく、実際にデータを読み込んで、レコメンドエンジン的なものを作るという非常に応用に富んだ例となっていた。