Youtube登録者5000人突破!!

【無料】動画でわかる Pythonで行列計算コース【全6回】

プログラミングが初めての人でもわかる、Pythonの講座をyoutubeにて公開しました。このコースは前回のPython入門コースの続きです。

Python初級コースでは、Pythonを用いて行列計算をする方法について解説します。

行列計算は普段使用しないかもしれませんが、数値シミュレーションやAIでは重要な技術です。大量のデータをまとめて処理する際に必要となります。

基本となる知識をしっかり身につけておくと、これからのプログラミングの勉強が楽になります。動画のタイトルに「丁寧に学ぶ~」という言葉をつけている通り、ひとつずつじっくりと理解していくことを目的として、解説を行っています。

本コースでは、Pythonによる行列計算をマスターします。まずはプログラミングによる連立方程式の解き方を学び、行列の作成方法から行列計算の解法、最後に便利なソルバーを学びます。

今回はかなり高度で専門的な内容になります。必要な部分だけをピックアップして視聴して頂くくらいで大丈夫です。ただ、数値計算に関わるなら非常に有益ですので、ぜひ一通り流し見しておくと今後役に立つでしょう。

1.連立方程式

行列計算の本質は連立方程式です。連立方程式を解くのに便利なツールとして使われるのが行列です。

ここでは、連立方程式を解くためのライブラリとして、sympyを使用します。

sympyは直感的に連立方程式を解くためのライブラリです。今後は別のライブラリを使うためsympyの使い方を覚える必要はありませんが、こんな機能があるということは知っておく価値があるでしょう。

ここで重要なのは、numpyでも行列を使って同じ操作が出来ることです。numpyで二次元配列も作成できますし、linalgを使えば解も得られます。

numpyは非常に強力なライブラリとして今後も使うため、使い方を頭に残しておきましょう。

2.行列

ここではnumpyライブラリのarrayを用いて二次元配列を作成し、それを計算してみます。

配列に対して演算子を与えると、各スカラー値に対する演算になります。matrixという行列計算専用の書き方もありますが、ここでは慣れ親しんだ配列機能を使います。

二次元配列でも、特殊な演算子を使えば内積などの計算はできます。さらに逆行列の計算や対角化、ノルムの計算なども可能です。

numpyをマスターすれば、二次元配列でもかなり多くの処理ができます。

3.初期化・結合

ここでは初期化と結合について学びます。

numpyは配列を扱うため、初期化により配列内のデータを一括して決定することが必要となります。

そんなときは、numpyのメソッドであるzerosonesなどを使えば、好きな値で配列を初期化することができます。

また、初期値が複雑な配列を作成したいときは、結合も便利です。concatenatestackなどを使えば、ブロックを組み合わせた二次元配列を作成することができ、自由度の高い初期化が可能です。blockもありますので、使いやすいものを選びましょう。

4.疎行列

疎行列とは、ほとんどの要素がゼロである行列のことです

ほとんどがゼロなのであればすべての値を保存する必要はないため、プログラミングでは疎行列に対して非ゼロ部分だけ記憶させます

scipyという科学技術用ライブラリのsparceと呼ばれる機能を使うことで、疎行列を扱うことができます。

使用中にあまり気にすることはないですが、sparceでは二次元配列でなくマトリックス(行列)として扱うので注意ください。

ここでは、疎行列への変換から反転、画面表示などをまとめて解説します。画面表示にmatplotlibと呼ばれるグラフ描画ライブラリも使っているのでご注意ください。

5.ソルバー

最後に、行列計算を行います。

ここではscipyの疎行列を使った行列計算を行います。linalgは一度numpyライブラリで使用しましたが、今回はscipyのものを使って説明しています。

linalgのdsolveを使うと、直接計算法により行列計算を行います。簡単な計算であれば直接計算で問題ないですが、例えば解がない場合や行列が大規模な場合は直接計算法は向きません。

そこで使用するのがisolveと呼ばれる収束計算による行列計算法です。大規模計算にはこちらが一般的で、様々な行列解法があります。

様々な計算法の中でCG法(共役勾配法)が優れており、さらに最も収束が優れているのがBICGSTAB法(安定化双共役勾配法)です。内部アルゴリズムは置いておいて、とりあえずこれを使うのを推奨します。

おわりに

今回は行列計算を行う方法について、第5回を使って説明してきました。

数値計算や大規模計算を必要とする専門の方は、C++やFORTRANを使用されるかもしれませんが、pythonで一度計算して可視化すると非常にわかりやすくて便利です。

また、pythonでも高速計算できる方法はたくさん出てきているため、ぜひpythonにおける大規模計算も検討してみてください。

今回の収束計算による行列計算なんかがわかりやすいように、pythonは既存のライブラリの豊富さが大きなメリットであるため、手軽に実装できるのが長所です。今後の市場の伸びも考えて、一度触っておいて損はないでしょう。

今回は行列について説明しましたが、python自体はまだまだポテンシャルがあります。

例えば、関数だけでも色々便利な機能がありますので、良ければそちらもご覧ください。