Philip N.Klein:行列プログラマー

作成日 : 2018-02-17
最終更新日 :

概要

Python で学ぶ線形代数。

Python か、線形代数か

この本は、Python を学ぶためにあるのだろうか、それとも線形代数を学ぶためにあるのだろうか。 前者だとすれば線形代数は既習ということが前提だし、後者だとすれば Python はすでに知っているということで進められる。 ひょっとしたら一粒で二度おいしい、すなわち線形代数を学びながら Python も覚えられるという効率のよい学習法を狙っているのかもしれない。

この分厚い本を通読してみた結果は、どちらかというと Python を知っている人が線形代数を復習するのによい本だということだ。 Python を知らない人はなんじゃこりゃ、となるだろう。そして、Python を知っていても線形代数の知識が全くない人は途方に暮れるのではないか、 と思った。原文の、あるいは翻訳の誤りがあってもなかなか気づかないのではないかと思うからだ。

Amazon のレビューである方が、p.3 の誤訳について指摘している。詳しくはそのレビューを見てほしいが、少しだけ言うと、 「余定義域とは……」で始まる文であり、指摘者は「終域とは……」が正しいとしている。

普通の線形代数とは違うところとして、行列の要素として `RR` や `CC` の場合だけでなく `GF(2)` の場合でも展開していることだ。 ここで `GF(p^n)` はガロア体 (Galois Field) のことであり、`p^n` を位数という(`p` は素数、`n` は自然数)。この本では 1.5 節(p.65) で説明されている。

問題を解いてみる

Amazon でのレビューでは、別のある方が「解答がない」と不満を表明していた。私の考えでは、解答はないよりあったほうがいいが、 ないならそれに甘んじるしかない、あるいは先生を探して先生から解答を教えてもらえばいい、というものだ。

私は先生ではないけれど、次の問題を考えてみた。

問題 2.14.4 : 以下に `GF(2)` 上の 6 つの 7 要素のベクトルがある。

`{:(bb(a) = 1100000) , (bb(b) = 0110000), (bb(c) = 0011000):}``{:(bb(d) = 0001100), (bb(e) = 0000110), (bb(f) = 0000011):}`

次のそれぞれのベクトル `bb(u)` に対し、上記のベクトルの部分集合のうち、合計が `bb(u)` となるものを求めよ。ない場合はその旨を述べよ。

  1. `bb(u) = 0010010`
  2. `bb(u) = 0100010`

解答は次のようになる。
1. は `bb(u) = bb(c) + bb(d) + bb(e)`
2. は `bb(u) = bb(b) + bb(c) + bb(d) + bb(e)`
これらを導くには、それぞれのビットが 0 になる場合を考えてみればよい。1. では最上位ビットと最下位ビットがともに 0 であるから、 `bb(a)` から `bb(f)` までを線形結合したときの `bb(a)` と `bb(f)` の係数はともにゼロでなければいけない。あとも同様。

なお、ここでの「合計」という語には違和感がある。「和」のほうがいいだろう。

数式について

数式表現には、MathJax を用いている。

書誌情報

書名行列プログラマー
著者Philip N.Klein
訳者松田晃一, 弓林司, 脇本佑紀, 中田洋, 齋藤大吾
発行日年 月 日
発行元オライリー・ジャパン、オーム社
定価5400円 (税別)
サイズ(26cm) 657ページ
ISBN9784873117775
NBC411.8
その他越谷市立図書館で借りて読む

まりんきょ学問所数学の部屋数学の本 > 行列プログラマー


MARUYAMA Satosi