幸谷智紀「Python数値計算プログラミング」講談社

紙版 [ Amazon ] ISBN 978-4-06-522735-0, \2400 + TAX
Kindle版 [ Amazon ] \2400 + TAX

Python数値計算プログラミング

 そーです,ワシが講談社刊行の自著に,「白泉社の少女漫画サイコー」と書いた大バカヤローでございます。だってホントのことだからしょうがないじゃん,少女フレンド系でハマれたマンガがなかったんだから(以下小一時間のオタク語り省略)。

 それはともかく,とうとう2021年3月に出た出た出ました長年の便秘に悩んでいた末の脱糞のごとく出ましたよ旦那。前書きにも書いたが,これも偏に編集人の忍耐のシロモノなのである。こちとら,額縁ょ~の第1次任期に完全にかぶってしまい,2年目からはコロナ禍の中での対応を迫られ,おまけに科研費も当たっちまったモンだから査読付き論文の方に注力せねばならず,どーしても精神的にも時間的にも伸ばせる〆切の方を後回しにせざるを得ず,大分お待たせをさせてしまったところ,諦めもせずに待ち続けて頂いた結果,何とか「工学基礎」という極めてニッチなジャンルではあっても「ベストセラー1位」という称号を得たのだから,多少はお返しができなのかなと勝手に悦に入っているのである。まぁ出版社的には第1刷分を売り切らない限りは利益回収ができないのだから,本来は第2刷が出てから成果を誇るべきところ,どーせ初刷売り切り実績が少ないワシとしてはそんなの待っていられないので(2021年5月6日現在,Amazonのみで売り切れ状態であるとはいえ),背後に家事に勤しむ神さんの白い視線を感じつつ,まずは本書に収められなかった雑感をここに書きつけておくことにしたのである。

2021年5月5日Amazon在庫切れの証拠画像

 前書きにも書いた通り,本書は元になる原稿があるにはあった。主として静岡大学で非常勤講師を務めていた時に書き足し書き足ししながら使用していたもので,最近は本学でも使うようになったが,いかんせん近年では古い記述が増えてきたことに気づいてはいたのである。そうなると,本学でも使うようになったMATLABをベースに書き直すかなとツラツラ考えていたものの,あんな高額なライセンス料を取りくさりよってと今一つ好感を持てず,取り掛かれないまま深層学習ブームやってきてPythonが流行りになってきたところ,元原稿を基に当方を突き止めた酔狂な編集者の方が「Pythonを取るかJuliaを取るか」という二択をワシに迫ったのである。後者は権威の方が大阪大学におられるので遠慮することにし,多少は心得のあって何とかなりそう&流行には乗りたいというスケベ心が相まって,本書が出来上がったという次第なのである。

 とはいえ,書き直しの必要性があることは承知していたから,章の最初に掲げた歴史的文献からの引用以外は頭から見直しをかけざるをえず,思いのほか面倒な作業であったことは前書きに書いた通りである。記憶を頼りに具体的な所を書きつけていくと,下記のようになる。

  • 「第3章 Pythonことはじめ」は,もともと特定の言語を想定しての記述ではなかったので,2/3以上は書下ろし。書いてから「あ,if文の記述がなかったな」と気が付いたあたりが迂闊である。ま,プログラミング言語の素養のある人向きの書籍であるし,実装の事例は随所にあるのでそちらを見ながら補って頂きたい。
  • 「第4章 丸め誤差の評価方法と多倍長精度浮動小数点計算」は,多倍長計算の章を丸ごと書き直した。下敷きにしたのはワシの紀要原稿であるが,書籍用としては記述をそのまま使うわけにもいかないず,更にリライトしてある。何せ,数多ある数値計算テキストとの差別化を図るためには丸め誤差と多倍長計算を外すわけにはいかず,とはいえワシの「多倍長精度数値計算」並みの記述を行うわけにもいかず,この長さに収めるのに苦労した。「著者の書き過ぎによる暴走」が起こらなかったのは,本章の記述を前提に紀要原稿を書いておいたおかげであろう。ワシ偉い。
  • 「第6章 基本線形計算」は,計算量・ノルムの解説と,NumPyとSciPyのBLAS機能の説明をマージさせつつ,計算時間とノルム相対誤差をコードを使いながら理解できるようにした。この辺,第4章の技法を使っての検証ができるような演習問題が追加できれば申し分なかったが,サンプルプログラムを弄りながらの手すさびみたいなものになるのでキリがないのでカット。まぁ締め切り間際の強行スケジュールで無理に入れてミスを増やしかねなかったからいいか(と勝手に納得)。
  • 「第8章 連立一次方程式の解法2 ―疎行列と反復法」は本来2章の分量を今の視点でまとめ直した。理論的には疎行列も密行列も違いはないが,計算量の観点からは全く違うものとして実装してあるので,まずは疎行列の解説から入り,今ではあまり見かけないSOR法系統の解説はベクトル反復が可能なJacobi反復法だけにとどめ,CG法とKrylov反復法,前処理のやり方がSciPy.sparseで簡単にできることをスクリプトとSuitSparse Matrix Collectionの実例で示すようにした。ざっくりした紹介になってしまっているのは,この辺りを詳細にやるほどの知見が著者にないせいでもあるが,この辺のまとめをちゃんとやってこなかった数値線形計算研究者らの啓蒙努力の怠慢も問題である。いくつか日本語のまとめっぽい書籍が出ていることは承知しているが「敷居が高ぇな」「門外漢には訳が分からんな」「理屈は分かったからコードにして公開してくれない?」というのが偽らざるワシの感想である。
  • 「第10章 非線形方程式の解法」も2章分まとめ,ニュートン法の説明を中心に据え,代数方程式の解法はコンパニオン行列の固有値問題に帰着でき,NumPy.roots関数で簡単に解けることを示すにとどめた。減次して解くという古典的な方法も好きではあるが,まぁ現代的とはとても言えないので割愛。
  • 「第12章 関数の微分と積分」と,この辺りから便利なパッケージを使うことをお勧めするように軌道変更している。微分についてはAutogradパッケージは外せないし,SciPy.integrateは次の常微分方程式との絡みが出てくるので,使い方を示すのは重要・・・と言いつつ,しっかりと等間隔分割によるニュートン・コーツ公式とガウス型公式の違いは解説しておく必要があるなと,この辺りの記述はそのまま元原稿から流用してある。二重指数積分法の説明に踏み込むと複素積分まで考えないとまずいので,今回は割愛。今の仕事が一段落したら,ロンバーグ積分と組み合わせて面白いことができないかなと夢想しているが,ここに踏み込んだら暴走が始まるので,この判断は良かった(でないと〆切が無限に伸びる)。
  • 「第14章 偏微分方程式の数値解法」は,元原稿にない放物型・双曲型・楕円型PDE全部の実例と解説を付加した。参照した本がいずれも古くて,疎行列ライブラリが存在していない時代のシロモノで,はてさてもう少し効率的なやり方はないものかと,自分なりに咀嚼してスキームを組み立ててスクリプトを作成。疎行列以上にPDEの世界は応用分野が広いので,分野ごとに様々な独自手法が存在し,とてもじゃないが一人ではまとめきれない。ということで,せめて前章の応用としての時間発展問題ぐらいフォローしたかったが時間切れであえなくチョン。詳しい人にはPDEだけでPython本を書いてもらえばいいんじゃないかなと思うが,大規模化のためにはコアの計算部分の並列化と高速化が欠かせず,PythonじゃなくてC/C++によるMPI/OpenMPによる並列化の話になるので,もう「入門書」とは呼べないレベルになること必定である。

・・・とまぁ,このぐらいにしておくが,数値計算に限らず,プログラミングが重要な役割を果たす分野の入門書は時代の流行に合わせて言語やソフトウェアを変えながら新刊本として登場するのが常である。本書も,FORTRAN→MATLAB→BASIC→Pacal→C/C++→Pythonという流れの一つとして出たもので,類書は今後も出続けるであろうから,読者の方々は自分と相性の良いものを選んでいただきたい。本書がその一つとしてどなたかの琴線に触れることができれば,著者としては望外の幸せというものである。

5/3(月) 晴・駿府

 ふぉ~,久々の日記更新である。2月以来,4年生が卒業し,1年生が入学し,来賓や保護者の入場制限があったものの,卒業生・入学制は全員一か所に集まっての対面方式の儀式が挙行され,ホットのしたのもつかの間,1期での退任叶わず額縁ょ~2期目の任期が始まり,プライベートでは神さんの入退院のドタバタがあった上に,こともあろうにダメもとで出したIEEE ARITH 2021のConference Paperが通過してしまい,GW前に何とか最低限の手直しをして再投稿する羽目になった。全く,このまま定年までぼよ~んと年月を重ねてTwitter廃人として人生楽しくストレスフルで過ごそうという人生設計がパーになってしまいかねない。まぁせいぜい死なない程度に,少々ここ数年の計画は軌道修正して上積みをしつつ,表舞台からのフェードアウトを狙うことに致しましょうぞ。

 困ったことに,ワシの「Python数値計算入門」が,ワシの本としては桁違いの売れ行きで,本日現在Amazonで品切れ状態である。

人生一度っきりのAmazon品切れ御礼&「ベストセラ1位」の証拠画像

 とはいえ,新刊リアル書店ではひっそりとPython本のコーナーに棚刺しになった在庫があるはずなので(少なくとも静岡の丸善・ジュンク堂にはある),お急ぎの方はデカい本屋で探してみてくださいまし。数カ月経つとKindle本として出ると聞いてますので,自宅のリアル本棚を埋めたくない向きはお待ちいただけると幸いです。出たらワシも買います。どのみち,待てば定価で必ず入手できますので,定価以上の値付けの中古業者からは購入しないように。

 退院後の神さんは絶好調で,モリモリ通常飯を食いつつあるが,退院直後は調子悪かったので,念のため,初カレーは麦ライス先生の簡単トマトキーマカレーのレシピで作ったものをご提供,フレッシュトマトとウスターソースのコクが良く出ておいしゅうございました。ウチは常備しているジャワカレー辛口ルーで作ったけど,すんげぇまろやかになるので胃腸の弱い向きにもお勧めです。

https://twitter.com/HG7654321/status/1386104165705736193
トマトキーマカレーの作成事例

 このGW中にもう一本,ベストセラー1位本(ニッチ分野で取ったくせに自慢する)のレビューっつーか,勝手気ままなエッセイを書きつつ,お仕事に邁進いたしまする。ちなみに,神さんはすっかり元通りで,ワシの頭頂部の禿を通りすがりに刺激する嫌がらせをしながら,家事仕事に専念されておりまする。

2/27(土) 駿府・曇

 薄曇りの穏やかな1日であったが,午後から気温がダダ下がり,明日は平年より寒くなる見込み。首都圏以外の非常事態宣言は月曜日から解除されるらしいが,ワクチン接種計画が予定より後ろにずれ込むこと確実の昨今,油断するとあっという間に元の木阿弥になる。とはいえ,解除せずにいつまでもロックダウン状態にしておくと,補助金がナンボあっても足りんし,経済は回らんし,誰が首相でも難しいんでないかい。ワシら一人一人が飲み会自粛しつつ,マスク常時着用を心掛け,手洗いとうがいを励行する他ないよなぁ。

 いやいや,新年明け以降,死にそうなほど仕事した。額縁ょ〜の仕事はもちろん,卒研発表,「Python数値計算プログラミング」の推敲2回,国際研究集会二本submit,3月のHPC研究会の予稿作成,最後は紀要論文の原稿締め切りをクリアして,本日は腑抜け状態なのである。人生で一番濃密かつギリギリのスケジュールで仕事を遂行した二ヶ月であったと言える。こんなの,ワシの人生設計にはなかったよなぁ。まぁお国から貴重な税金を割いてワシの個人研究に予算を下さったのだから,査読ありの国際研究集会とか論文誌にチャレンジし,acceptさせる努力は最低限の義務である。科研費貰っておきながら,口頭発表だけで済ましている輩はワシから言わせれば税金ドロボーである。一応,昨年は一本通したし,本年も最低一本は大丈夫だと思われるが,できれば二本でも三本でも通したいものである。あー疲れた。

 こんなハードスケジュールでも,何とか完走できたのは,単に神さん用として購入した任天堂Switchリングフィットアドベンチャーのおかげである。かねてより運動不足を指摘されていた神さん用として,昨年11月下旬に前倒しクリスマスプレゼントとしてセットで購入したものを,神さんは取り憑かれたように毎日攻略し,1月には早々に全クリアしてしまったのである。ワシは最初その様子を見るだけにしていたのだが,ムクムクと征服欲が沸き上がり,12月半ばぐらいから恐る恐る開始,1月からは毎日100kcal以上の運動を欠かさず行い,今週木曜日に最終23ステージをクリアしたのである。

クリアした証拠画像

 忙しいとか言いながらも,毎日欠かさず二ヶ月以上に渡り就寝前に運動していたおかげで,特に腹回りがスッキリしてベルトが緩くなり,ハードスケジュールを駆け抜けるスタミナを養えたのだ。誠に任天堂様様であり,神さん共々厚く御礼申し上げたい。コロナ禍のため,昨年長らく品薄状態だったらしいが,ちょうど11月に入った辺りから市中で出回るようになり,地元の家電量販店でも在庫がいつでも購入できるようになっていたのもラッキーであった。まぁつまりは流行からは周回遅れだった訳だが,そんなことはどーでも良い。ゲームが健康増進に役立つようになったのは,ファミコン第一世代として育ったワシらアラフィフには誠に感慨深いものがある。

 明日は大学見学会に半日お付き合いすることになっているが,ちょーどいいので

の宣伝をちょろっとしておくことにする。そんくらいの役得はあってもいいわな。

 明日に備えて寝ます。本日は133kcal消費できました。

1/1 (金・祝) 駿府・晴

駿府城方面から年明け初の富士山

明けましておめでとうございます。

本年もよろしくお願い致します。

 年越しの後は、ガースカ寝て、雑煮食べて、神さんのご実家で寿司をご馳走になり、年賀状の返事を書いたら投函し、リングフィットアドベンチャーで汗を流して風呂入ってぐっすり寝られたら良いなぁ。まぁ、人生このぐらいの幸せが良い。

 今年もボツボツやっていきます。

12/31(木) 駿府・晴

 シベリア方面からの寒波来襲につき,ピーカン晴れな静岡。富士山は程よく冠雪しており,明日は良い初日の出が拝めそうである。良きかな。

 一方,コロナウイルスは活発に東京23区で猛威を奮っており,本日とうとう1300人に到達。飲食店の時短要請も掛け声だけでは効き目なく,罰則付きのコロナウイルス特別対策措置法は1月下旬になるということだから,これからセンター入試が始まるというのに大混乱ぶりが目に浮かぶようである。クラスタ潰しでは対処できない状況なんだろうな。冗談抜きで,関所がつくられるやも知れぬ。

 昨日で年越しの準備を前倒しで進めていたので,うま煮は準備O.K.,懸案だった自宅書斎の床置き本も一掃できた。

 段ボール7箱は年明けにBook Offに差し出す予定。二束三文だが,まぁ引き取ってくれればそれで良い。これ以外にも同人誌の山を5つほど古紙回収に出した。メルカリや駿河屋にでも出せばそれなりに収益は出そうだが,面倒だしなぁ。ま,歳も歳だし,腰を痛めそうな重いものはなるべく減らして定年を迎えたいものである。

 ということで,年越しはまったり年越し蕎麦を食ってリングフィットアドベンチャーでカロリー消費して校正も手がけて寝る予定。早くワクチン出回って大手を振って東京に遊びに行きたいものである。オリンピック後になるかなぁ。秋口か。それまでは生き延びていたいものである。

 本年も多数の皆様にお世話になりました。
 来年もよろしくお願い致します。

 では良い年越しを。