幸谷智紀「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週間,今週末で職場も仕事納めに入る。今年末はぷちめれ祭りする暇もなさそうなので,数冊,現実逃避がてら紹介することにしようっと。

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

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月中にもう少し記事の更新をしてみたいというだけのテストで終わるかも。さて査読に戻ります。

8/2(日) 晴後曇・駿府

 ふひ〜,何とか7月最終週,怒涛の如く押し寄せてくる書類作成(本来業務でないものも含む),研究発表講演@Zoom,最終対面授業,最終卒研ゼミが終わって気が抜けている。あとはPython本の手直しをチマチマ,1日1スクリプトを基本に地道に手直ししていくことに傾注しつつ,夏休みの宿題としての3倍精度演算のSIMD化手法を考えていかねばの娘。手がかりはありそうなので,頭使って考えないとなぁ。あ,今週末までに講演予稿を上げねばの息子。讃岐うどんの如く伸ばしに伸ばした査読レポートも書かねばの従兄弟。結構やり残しがあったりする。まだまだ「夏をあきらめて」とはいかないなぁ。

 先日は山下達郎のオンラインコンサートをApple TV 4Kで楽しんだ。我が家のTVはハイビジョン止まりなので無駄なスペックではあるが,その分余裕があるのか一度も途切れることなく過去のコンサート映像集を楽しむことができた。

出待ち状態の山下達郎オンラインコンサート@Music/Slash

 それに引き換え,本日見た三谷幸喜の新作劇「大地」の配信では,埋め込み動画をApple TVに飛ばすことができず,あれこれ試行錯誤しているうちに冒頭数分を見逃す羽目に陥った。結局,MacBook Airの全画面表示で約3時間の公演を観劇することになった。後で気がついたが,全画面のAirPlayミラーリングなら可能だったかもしれない。何にしろ,eplusのお試し動画では問題なく埋め込み動画を直接Apple TVに飛ばせたので,何かしらの制限をかけるのであれば,視聴環境もその制限をかけておいていただきたいものである。

これを全画面表示して観劇することに


 公演そのものは豪華な役者陣の演技を堪能でき,特に終盤のドタバタ喜劇幕や,クライマックスの主演・大泉洋の叫びと嘆きには圧倒され,満足できた。三谷幸喜の群像劇にありがちの複雑な伏線はほとんどなく,収容所という制限付きの環境に置かれた「演劇人の業」と「才能という宿命」という二つに絞ったテーマを重厚に見せてくれた作品であった。次こそは大画面で見てやろうと待ちかねている。コロナ禍終了後にオンライン配信をしてくれればの話ではあるが。

 次のApple TV活躍の場は古舘伊知郎のトーキングブルース であるらしい。山下達郎以外は全て神さんの趣味で有り,ワシは専属セバスチャンとして奉仕するほかないのである。まぁ面白いからいいけど。今週はもう少しマメにここを更新したいけれど,最近はPHPのバージョンを上げてくれとWordPressがうるさいのである。

PHP 7.0ではもうダメと言うことらしい

 CentOS6の環境でこれ以上PHPのバージョンが上げられず,WebArenaのクソトラブルが短時間で3回も起き腐ったので,全面的にさくらインターネットに移行してやろうかという画策もしている。クラウドサービスも価格と質が問われる時代になってきたなぁ。

 さて,これからカレーを作ります。