幸谷智紀「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という流れの一つとして出たもので,類書は今後も出続けるであろうから,読者の方々は自分と相性の良いものを選んでいただきたい。本書がその一つとしてどなたかの琴線に触れることができれば,著者としては望外の幸せというものである。

2/27(土) 駿府・曇

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

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

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

クリアした証拠画像

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

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

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

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

12/20(日) 駿府・晴

 先週から急激に寒気がシベリアから降りてきたらしく,平年並の寒さになってきた。日本海側はドカ雪に見舞われて関越自動車道が通行止めになり,自衛隊にお出まし願うという有様。コロナ大流行に陥った旭川や大阪でも自衛隊に助けを求める状況で,かなり末期的な感がある。ワクチン接種は来年から少しずつ開始されるようで,夏までにはだいぶ良くなるかなとは思うが,それもこれも東京オリンピックのためと思うと,何だかやるせない気分になるのは気のせいかしらん。何かとこの手の公共事業でしか金の使い道が見つからないという老齢化社会日本を象徴しているように思えて仕方ないんだよなぁ。

 何とかシコシコ間に合わせて「Python数値計算入門(仮)」,入稿しましたよ全く。PEP8に合わせてソースの書式変更が一番面倒くさい上に不毛っぽくてイヤんになってきたが,関数定義の後は2行明けという規則のおかげで行数は稼げるという,著者にとってのメリットはある訳で,痛し痒しかな。何にしろ,次週には第一校が到着するとのことで,正月は暇を見ながら校正作業に勤しむことになる。全く,額縁よ〜なのによー働くなワシ。しかしこれで当面本を書くこともなさそうだし,プログラミングに勤しむことにしよう。

 とゆーことで,何とか「AVX2によるマルチコンポーネント型多倍長精度行列乗算の高速化」が形になってきた。

まぁ先達のある研究なので二番煎じ的ではあるけれど,Strassenとの組み合わせて最高速を目指すというところは売りになるかと。第一校が到着するまでには日本語の下書きは終わらせて,ヘボ英語DraftのArxiv登録は済ませてたいところ。どーなりますことやら。そろそろ線形計算の飽きてきたんで,直接法と疎行列の実装終わったらいよいよアレに着手したい。夏休み以降の課題なんだろうけどねぇ。

 つーことで,次年度の実験講座向けの資料の作成,大体材料は揃った。

 Flaskで計算させようという実験資料

 どーせ全部は終わらないので,これに追加する形でDeep Learningに繋げるような内容にして,卒研ネタにできればいいかなと。要素技術の追求は個人的には面白いし,定年後もやりたいお仕事ではあるんだけど,若い世代にそれを押し付けるのは老害もいいところ。やりたい向きが自発的に取り組むのはいいけど,総合的な技術の積み重ねの小山に登らせる経験なしで盲目的に下積み的テクニック習得に時間を使わせるのは教育機関としてはよろしくない。ま,FlaskでMVCの習得をさせてPythonにも慣れて貰うというのは一応その方向ではあるので許してもらえるかなと。

SIRモデルで,平均感染期間2週間(14日,左図)と3.5日にして計算したものを題材の一つとした。やっぱり感染者数(オレンジの線)が違うんだなと再認識。

 さて,コロナ禍でドタバタの本年もあと2週間,今週末で職場も仕事納めに入る。今年末はぷちめれ祭りする暇もなさそうなので,数冊,現実逃避がてら紹介することにしようっと。

 山下達郎の朗々としたクリスマスソングを聞きながらの,穏やかな日曜日でございました。ひと段落済んだらまたなんか書こうっと。

幸谷智紀・國持良行「情報数学の基礎(第2版)」森北出版

幸谷智紀・國持良行「情報数学の基礎(第2版)」森北出版

[ Amazon ] ISBN 978-4-627-05272-7, \2200+TAX

 さあ寄ってらっしゃい見てらっしゃい。引退したク○教授どもが(当時の)若手教員二人に押し付けた新科目「情報数学基礎」のテキスト,紆余曲折あって森北出版社長の目に止まって出版に漕ぎ着け,所属大学以外でもあらびっくりのアラビア石油,テキストとして採用してくれたってんだからありがたいことこの上ない。本学だけでは売り切ることができないところ,5刷まで行ったてんだから僥倖僥倖これ僥倖,「本文二色刷りにして第2版を出しましょう!」と第1版担当編集F氏は宣うたのもこれ自然,著者としてはありがたいことこの上ない。是非もなし,どうぞどうぞと承諾すればコトが済むかと思いきや,「グラフ理論の章を追加して,まえがきからもう一度全面校正をお願いします。ついては第1版から追記・変更・修正するところがあればそれご指摘的下さい」ときたモンだ。クリビツ仰天,何せ著者二人は管理職,と言えば偉そーだが実態は単なる雑用係何でも屋,コロナ禍でしっちゃかめっちゃかのところに新章書き下ろしの上に全ページ校正アリだというから笑っちゃって腰が抜けるところを反射神経的に「いいっすよーやりましょー」と返事しちゃったんだから間抜けというかなんというか。んじゃ下書きよろしくです〜といつものよーに頭脳労働担当著者にぶん投げて,まぁそのうち出来たらワシが手を入れればいいやぁと呑気に構えていたらあっという間に「下書きできました」ときたモンだ。どーせ期限内にはできないだろうと悠々と構えていた所,こうなりゃ仕方ない,全面的に文章入れてリライトして図もたくさん追加して肉体労働担当著者としてでっち上げましたよ超特急で。その後は森北の編集氏とワシらとの間でやれこの題材はコラムじゃなくて本文にしろだの何だの変更しまくって頭からの校正も2回やってどうにかこうにか本日(2020年11月26日(木))販売に漕ぎ着けたという次第。20ページ近く分量増えて読みやすい二色刷りになったのに何故かお値段据え置き2200円(+TAX)! 今日日,容量減らしてお値段据え置きとかフザケタ実質値上げが相次ぐこの日の本で,なんて良心的なんだと涙が出てくるってシロモンなのだ。さあ買った買った買ったぁ!

 ・・・というヤケクソ的な愚痴はともかく,好評頂いたのは著者としてはありがたいコトこの上ないのは事実である。「理工系大学でこの程度?」という批判も覚悟で書いたモノだが,第2版が出たということは,まぁつまり「この程度」のための邦文テキストが存外に存在していなかったという事実が判明してしまったということなのだ。プログラミングやデータベースや情報理論をこれから勉強しなきゃならんのに命題論理も集合も写像も関係も知らんでは困る。いやそれ以前に高校までの数学では何を習ってきたか,計算手法じゃなくて学ぶべきは「概念」であって,記号はその表出に過ぎないということから説き起こす必要がある,というニーズをコンパクトに本文171ページに納めたのが第2版に漕ぎ着けた一番の理由ではないかとワシは睨んでいるのである。

 大体,研究者の書いたものは東海林さだおが言うところの「ドーダ」が多すぎるのである。鹿島茂が定義したこの「ドーダ」=「過剰な自己愛的表出」,早い話が「能力自慢」,まぁオベンキョーを生業とする学者先生の職業病みたいなモンだから仕方のないことではあるが,初年時の学生に対して「ワシらは専門家であるからしてこれだけのことを知っていてこのぐらいの問題は楽勝なのだ「ドーダ」」の山を押し付けることはアカデミックハラスメントにすらなりかねない。申し訳ないが,ワシらがこのテキストを書いた頃には既存の「離散数学」のテキストはかなりの「ドーダ」的な代物であり,「センスがない奴には解けないだろ?」という,良問だが,それ故に捻った演習問題に満ち溢れたモノだったのである。習得できれば何ということもないが,概念の理解と暗記だけでも大変なのに,問題が素直に解けないモノであれば,成績下位者から投げ出してしまうこと間違いない。本学に「情報数学基礎」という必修科目が設定されたのは,ともかく論理・集合・写像・関係という最低限の離散数学用語と記号と概念の習得をして貰わねばこの先がない!,という,主として数学担当の教員による要請によるものなのである。が,サイテーなことにこの科目の必要性を訴えた○ソ教授どもが担当するのイヤがってワシら若手(当時)に押し付け腐ったモンだから,「まぁこんくらいなら大丈夫かな」という内容に落ち着かざるを得ず,「ドーダ」の入れようがなかった,というのが偽らざる真相なのである。

 しかしまぁ,結果的に,中学・高校数学との接続も意識した必要最低限の解説と,素直極まりない演習問題にしたことが,テキストとしては良かったのであろう。実際,数学的センスを必要とする場面が現実にそうそうあるかというと案外そうでもないし,センスなんてモンを発揮する以前に,概念習得がまず先にあって然るべきなのである。一通りの概念を学んだ後でないと,有段者のセンス良さに感心することすらできない。逆に,センスの良さばかり追いかけていると,情報処理における「肉体労働」,つまり「プログラミング」の重要性を軽んじる「評論家バカ」,つまり「眼高手低」の輩に堕してしまう可能性があるのだ。まずは素直に概念習得しましょう,そのための必要最小限のひねっていない問題解いて慣れましょう,それが本書のコンセプトなのである。

 ワシらが目指しているのは,アイディアの有用性を理解する基礎知識の涵養であり,プログラミングテクニックを通じてアイディアを実現する技術の習得であり,そのためには,プログラミングのための概念の修養が重要である。本書はそのための簡易覚え書きであり,それ以上でもそれ以下のものでもない。分量の少なさ,演習問題のストレートさは,概念理解のスピードアップを図るためのものであり,センスの涵養を行いたい向きには,前書きにも書いた通り「もう少しレベルの高い(ドーダが詰まった)「離散数学」のテキスト」や「(純粋ドーダの塊である)情報システム関連の論文」を使った教育を行って頂きたい。その際には本書を露払いとして使用して頂ければ,著者としては「この程度」で書いた甲斐があった訳で,ありがたい限りなのである。

10/23(金) 袋井・雨後晴

 大学祭準備のための休日であるが,折角の金曜日なので出勤してこまごました用事を済ませている。最近の論文査読,査読者の皆さん真面目なので,締め切り前にレポートを上げておられる。ということでワシもこれから第2回目の査読報告書を書く予定。ま,誠実に直してあるので「このままでもオッケー」と書けばいいんだけど,修正点のチェックはやらなきゃならんので,ある程度手間はかかるかな。

 2011年に出版した「情報数学の基礎」,めでたく11月下旬に第2版が出ることと相成った。これもひとえに本学だけでなく,他大学等で教科書採用して頂いたおかげである。どこがどう変わったかは,発売日以後にこちらで告知がてら書きつけることにするが,第1版を持っている人も悔しがることはなく,値段は据え置きだし(感謝したまえ!),記述そのものもさほど変わっていないのでご安心を。

 ところで「Python数値計算入門(仮)」,演習問題と解答以外の本文は完成したものをお送りしてあるので,11月以降は現状のものを手直しして学内で使用しちゃいますですよ。2月には内部テキスト印刷の〆切なので,年内にはお返事よろしくです。>某さん

 にしてもコロナ禍は長引くなぁと,皆さんと同じ感想をワシも持っている。この日記,新型コロナウイルス感染症対策本部の尾身・新型コロナウイルス感染症対策分科会長の感染防止策の具体的な説明を聞きながら書いているのだが,東京の感染者が200人/日で安定して生成されていることから,GoToなんちゃらの勢いも手伝って地方に感染が飛び火するという構造らしく,日本全体の感染者数もちっとも減らない。激増しないのは,小林よしりんのような暴論を皆聞かず,真面目にマスクしつつアルコールで手指消毒しているからで,公衆衛生的には理想なのだろうが,教育関係者としてはヒヤヒヤしっぱなしである。首都圏とは違って静岡県内ではせいぜい日に数人程度の感染者数で済んではいるが,誰が掛かってもおかしくない状況であることには変わりなく,用心に越したことはないのである。まぁ「コロナ論2」が出たら買うけどね。「コロナ諭」については話題が古くなりすぎて,ここで取り上げる気にならない。よしりんにサイエンス的な議論を期待する方が間違いなのは承知しているが,どうも医療関係者との見解の相違が大きすぎて,トランプ大統領同様,よしりんコロナ論を支持する気にはならんなぁ。

職場のメインマシンを20H2にアップデートした証拠

 Windows 10 2004がちっともやってこないのでおかあさんあのあっぷでーとどうなったでせうねとやきもきしていたら,次の20H2がやってきた。相変わらず手持ち環境のWindows Updateではお誘いがないので,手動updateを強行して成功。ちょっとExcelが重たくなったかなぁというぐらいで,今のところ正常に使えている。ボチボチNote PCの方にも突っ込んでいくことにするか。

 そういや,このサイトのPHPもバージョンアップをしないとイカンのだった。一旦,全部対比してCentOS 6→Ubuntuに挙げる必要があるのだが,クソみたいなサービス品質に成り下がっちゃったWebArenaとの付き合いを考え直したいし,いっそのこと丸ごとさくらに鞍替えしちゃおうかなぁ・・・とも考える。年度末までに結論を出すかな。

 面白い本を何冊か読んだので,10月中にもう少し記事の更新をしてみたいというだけのテストで終わるかも。さて査読に戻ります。