NumPy でいろいろな行列を作成する
執筆者:三雲勇二
※本記事は吉政創成株式会社「Python学習とキャリアアップ」より寄稿されたコラムとなります。

みなさん、こんにちは。 エンジニアをしております、三雲と申します。
私はたまにですが初心者にプログラミングについて教えたりすることがあります。 特に Python は人気で、理由として『データ分析』が簡単に行えるところで興味を持たれる方が多いようです! データ分析というと少し難しそうに感じるかもしれませんが、Python を使うと思ったよりも簡単に行なえます。 この機会に試してみてはいかがでしょうか?
今回は紙書籍版『Pythonによるあたらしいデータ分析の教科書 第2版(翔泳社)』では、p.106 〜 p.113 の部分になります。
テーマは「NumPy でいろいろな行列を作成する」です。
せっかくですので私も初心に戻り、新人エンジニアやこれからエンジニアを目指している方の「Python でデータ分析を勉強してみよう!」という視点で、分かりやすい記事になればと思います。 どうぞよろしくお願いいたします。
そもそも NumPy とは
前回のコラムでも書きましたが、改めておさらいです。
NumPy は Python の数値計算のためのライブラリです。NumPy の主な機能は、多次元配列(ndarray)オブジェクトをサポートすることで、これにより数値データの効率的で高速な操作を可能にします。
少し難しい言い回しになってしまいましたが、Python のリストより高度な計算が素早く行えるライブラリということのようです。
NumPy のもう一つの特徴として、多くの Python のライブラリの基礎部分として使用されるため、他のライブラリと一緒にインストールされることが多いです。それほど非常に便利なパッケージなので、Python でプログラミングする方は NumPy の使い方を覚えておいて損はないです。
NumPy は pip でインストールできます。『Pythonによるあたらしいデータ分析の教科書 第2版(翔泳社)』で使用するバージョンは p.50 にあるとおりのものを指定しましょう。
バージョンによって、使用できるメソッドや引数など変更がある場合がありますので、書籍通りのバージョンをインストールすることが重要です。書籍通りに動かない場合、よくよく調べてみると「書籍のバージョンと異なるバージョンがインストールされていたことが原因だった」というケースもありますので、ご注意ください。
NumPy を使うにはパッケージをインポートしておく必要がありますので、忘れずにしておきましょう。
NumPy でいろいろな行列を作成する
NumPy で行列は作れるのですが、実際に作りたい行列はどの関数で作ればいいのでしょうか?行列のイメージから適切な関数を書籍から探してみましょう。
行列の項目をすべて同じ項目にする
すべて同じ数値で行列の項目を埋め尽くす方法です。例えば、次のようにすべて 9 にしたいとします。
書籍の p.111 〜 p.112 を確認すると、full() を使うとよいようです。
a = np.full((3, 4), 9)
結果は次のとおりとなりました。
[9, 9, 9, 9],
[9, 9, 9, 9]])
行列の項目をすべて 1 にする
先ほどと同じなのですが、今度はすべての項目を 1 にしてみましょう。書籍の p.111 を確認すると、ones() を使うとよいようです。
a = np.ones((3, 4))
結果は次のとおりとなりました。
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
ここで 1. と小数点が付いていますが、これは浮動小数扱いとなるようです。 さきほどの fill() でもできそうなので試してみました。
結果は次のとおりとなりました。
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
同じ結果を得るためにやり方は一つとは限らないですね。
ただし、特に理由がなければ ones() のほうが 1. のみの行列を作るという目的がわかりやすくなるため、ones() にしておいたほうが良いと思います。コードは読むときに目的がわかるようにしておくことも大事かと思います。
行列の項目をすべて 0 にする
今度はすべての項目を 0 にしてみたいと思います。書籍の p.110 を確認すると、zeros() を使うとよいようです。
a = np.zeros((3, 4))
結果は次のとおりとなりました。
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
ここで 1. と小数点が付いていますが、これは浮動小数扱いとなるようです。さきほどの fill() でもできそうなので試してみました。
結果は次のとおりとなりました。
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
こちらも同様に、特に理由がなければ zeros() のほうが 0. のみの行列を作るという目的がわかりやすくなるため、zeros() にしておいたほうが良いと思います。
単位行列を作成する
単位行列とは、行列の対角成分が全て 1、それ以外の成分が 0 のものです。行と列の数が同じ数になっていることも特徴ですね。対角成分とは、行列の左上隅から右下隅に向かう成分のことです。
書籍の p.111 を確認すると、eye() を使うとよいようです。
a = np.eye(5)
結果は次のとおりとなりました。
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
乱数行列を作成する
乱数とは、規則性のないランダムな数値です。Python の勉強をするときに、適当な数値の行列が欲しくなるときに使うものですね。書籍の p.106 〜 p.110 を確認すると、random() を使うとよいようです。
rng = np.random.default_rng()
a = rng.random((3, 4))
結果は次のとおりとなりました。ただ、数値が書籍と異なります。
[0.64596803, 0.75403276, 0.46150227, 0.63150051],
[0.28453536, 0.60291907, 0.24632528, 0.69555684]])
乱数だからこれでいいのでしょうか?
実は乱数を書籍とあわせる方法があります。それはシード値というものを設定するとよいようです。書籍の p.107 を確認してください。コードを書籍どおりに自分の PC で実行したときに、同じ結果が表示できると初心者としては安心できますね!
rng = np.random.default_rng(123)
a = rng.random((3, 4))
結果は次のとおりとなりました。数値は書籍とおなじになりました。
[0.1759059 , 0.81209451, 0.923345 , 0.2765744 ],
[0.81975456, 0.88989269, 0.51297046, 0.2449646 ]])
実務では乱数が再現されるというのは問題があるため、状況を再現するときだけ使ってください。書籍にもその旨が丁寧に解説してありました。
今回のコラムはいかがでしたでしょうか?インターネット・アカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。ご興味ある方は各講座のページを覗いてみてください。
エンジニア 三雲勇二
デジタル人材育成・助成金のお役立ち資料をダウンロード

デジタル人材育成や助成金活用のお役立ち資料などをまとめてダウンロードしていただけます。コンサルタントへの無料相談をご希望の方はこちらからお問い合わせください。
- DX人材の育成&事例紹介 リスキリングのロードマップ付き
- デジタル人材育成に使える助成金制度
- デジタルスキル標準 役割別おすすめ講座