蛇使いな彼女BLOG
【第24回】 numpyを使った乱数生成と置き換え操作 ①
2020.12.03

今日は過去にちらっと紹介しましたが、乱数生成のコード例を書いてみます。
ちなみに、Numpyの扱いや関数は専門書籍を見たらそこそこ分かりやすく書いてあるのでそっちを参考にしてくだされ。
そもそも私が数字に疎いのでろくな説明ができない件 (^_^)
…さて、乱数生成にはnumpy. randomという関数を使用します。
一様分布だの正規分布だの沢山あるなかの例として
⦁random.permutation:入力配列をランダムに並び替え
random.randint:与えられた整数範囲で乱数を生成
これらを見ていきましょう。
①random.permutation
例えば、0.1から1.0まで0.01刻みの配列arr_oを作ったとします

そしてこれをrandom関数の引数に指定すると…

はい、順番がランダムに入れ替わりました!簡単!
②random.randint
次、randintはpermutationと違い、そのまま範囲を入力します。

-100から100の範囲、(10行10列)の乱数生成をしました。こちらはreshapeではなく関数内に直接記述するんですね~(感心)
簡単すぎてちょっとおもしろくないので、②の配列を使って簡単な操作をしてみます。
Numpyには配列操作の関数も搭載されていますが、その中でもNumpy.Whereは使用頻度が高い気がするのでここで紹介します(^u^)
Numpy.Where
■Numpy.Where(条件式,True,False):その条件に一致するインデックスを返します。(第二引数以下を設定すると置き換えた値を返します)
以下、0未満のインデックスを抽出してみます。

結果は…

続いて、第二引数以下を設定した場合です。
その条件が当てはまればNan、当てはまらなかった場合は100に置き換えます。

と、こんな感じです!置き換えは元のデータに上書きするのではなく、コピーデータを置き換えているのでarrはそのままです。
Numpy.whereは使い方に慣れると結構便利なので紹介させてもらいました。
まとめとしては、
⦁Numpyは標準Listと違ってループ処理なしで、多次元配列を一括に処理できるところが魅力!
⦁便利な計算用の関数が豊富!
でした✨
ではでは。