NumPyの乱数生成を理解する
執筆者:南波真之
※本記事は吉政創成株式会社「Python学習とキャリアアップ」より寄稿されたコラムとなります。

機能に追加しての数値計算や多次元配列を利用できるNumPyを使った、次元追加の方法について取り上げてきました。
配列用のデータ型であるndarrayについて、1次元、2次元の配列を確認し2次元の配列を3次元の配列に次元追加するいくつかの方法をまとめてみました。
ご興味ありましたら、ぜひ前回の記事もご覧ください。
さて、今回も引き続きNumPy(ナムパイ)ですが、乱数についてです。自分でもしっくり来づらいところがありましたので調べてみました。
私が勉強しているPythonによるあたらしいデータ分析の教科書(翔泳社)では、P.104〜P.108の部分になります。
乱数とは?
Pythonで乱数を使う方法は、実はPythonの標準モジュール(random)でも可能ですが、NumPyにも乱数生成機能(np.random)があります。
基本として使うもの、実用的に使うものを確認していきます。
1.np.random.random
まずは、rp.random.random関数です。これは、行と列のタプルを渡すと0以上、1未満の範囲の乱数の2次元配列を作成してくれるものです。
乱数ですので、実行されるごとに出力される数は変化します。
1回目の出力結果
[0.18636305, 0.54046982, 0.8385945 ]])
2回目の出力結果
[0.31845742, 0.76938227, 0.40252174]])
乱数生成の場合は、毎回同じ結果を出すことでプログラムの再現性を確保することが必要な場合もあります。乱数が実行した場合にすべてバラバラになってしまうと、そのプログラムが正しく動作しているのかを確認しづらいためです。
こういった場合には、「シード値」というものを利用して結果を固定します。
np.random.seed()という書き方になります。()に入れる数字が結果を判別する番号(シード値)になります。今回は10をシード値として設定してみました。
出力結果
[0.63364823, 0.74880388],
[0.49850701, 0.22479665]])
もう1回実行してみる。
出力結果
[0.63364823, 0.74880388], [0.49850701, 0.22479665]])
このように、乱数ではあるのですが出力結果を固定させたい場合にはシード値を利用します。
2.np.random.rand
次は、np.random.rand関数です。
np.random.random関数と基本的には同じで、こちらは0〜1の範囲の配列を生成するのですが、random関数の場合は行と列のタプルを渡していたところが、rand関数では2つの引数で表すような書き方になります。こちらのほうが直感的には分かりやすい感じもします。
1回目の出力結果
[0.14217005, 0.37334076, 0.67413362]])
2回目の出力結果
[0.51313824, 0.65039718, 0.60103895]])
もちろん、シード値を使った結果の固定も可能です。
3.np.random.randint
次は、np.random.randint関数です。
第1引数以上かつ第2引数未満のランダムな整数値を、第3引数としてタプルで渡した行と列の2次元配列で生成する事ができます。intは整数の意味がありますので、分かりやすいですね。
一番シンプルなパターン
1回目の出力結果:19
2回目の出力結果:4
第3引数をタプルで渡したときのパターン
1回目の出力結果
[ 2, 14, 7, 6],
[ 9, 14, 4, 10]])
2回目の出力結果
[12, 13, 18, 14],
[ 2, 19, 17, 14]])
このように整数の乱数を作る場合はとても便利です。もちろん、シード値を使った結果の固定も可能です。
4.np.random.uniform
次は、np.random.uniform関数です。第1引数以上かつ第2引数未満のランダムな小数値を、第3引数としてタプルで渡した行と列の2次元配列で生成することができます。
先程のnp.random.randint関数の小数値版です。
一番シンプルなパターン
1回目の出力結果:1.2705292583563312
2回目の出力結果:4.856045366872552
第3引数をタプルで渡したときのパターン
1回目の出力結果
[3.35430458, 1.98434287, 2.44885093],
[0.24343067, 1.36122536, 2.55823332]])
2回目の出力結果
[3.99354315, 1.47463632, 1.89857694],
[1.94547003, 1.44712794, 2.98521048]])
このように小数値の乱数を作る場合もとても便利にできます。もちろんこちらも、シード値を使った結果の固定も可能です。
5.np.random.randon
最後が、np.random.randon関数です。
出力される乱数が標準正規分布に従って、平均0、分散1の分布で出力されます。データ分析などで特によく使われ、統計やデータ分析をやっていきたい人には必修事項です。正規分布という統計学で最もよく利用される、平均値を中心にしてベル型の左右対称の連続型の確率分布のことで、特に平均0、分散1の正規分布のことを標準正規分布といいます。
1回目の出力結果
[-1.66521307, -1.63913029],
[ 2.28071997, 0.82292265]])
2回目の出力結果
[-0.83848544, -1.63397285],
[-0.67980614, -0.84758918]])
このようになります。シード値を使った結果の固定も可能です。
Pythonのデータ分析では乱数を理解
今回は、NumPyの乱数について書いてきました。
何らかのランダムな数を元にデータ分析用のコードの出力結果を確認したいという状況は多いです。乱数の作り方はしっかり覚えておきたいところだと思いました。
Pythonでデータ分析をする上では、NumPyは必須項目です。理解すべき項目も多いですが、細かい部分を理解しておくことで応用が効くようになると思いますので、頑張りましょう。
インターネット・アカデミーは、Python講座が充実しています。Python認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。ご興味ある方は各講座のページを覗いてみてください。
南波真之
デジタル人材育成・助成金のお役立ち資料をダウンロード

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