numpy.random.permutationは、渡した配列の要素をランダムに並べ替える関数です。多次元配列を渡した場合は最初の軸だけを並べ替えます。
なお、同じような関数にnumpy.random.shuffleがあります。両者の違いは、permutationは渡した配列の要素を並べ替えた新しい配列を生成するのに対して、shuffleは引数に渡した配列の要素を並べ替える点にあります。
このページでは、random.permutation関数について解説していきます。
重要
NumPyのversion1.17以降は、乱数操作には、関数は使わずにジェネレータメソッドを使うようになりました。最大の理由は、ジェネレータから乱数を生成する方が遥かに高速であり、科学技術計算に適しているからです。そのため、現在はrandom.permutation関数の使用は推奨されておらず、代わりにGenerator.permutationを使います。『Generator.permutation – 既存の配列の要素をランダムに並べ替えた新しい配列を生成』で解説しています。
1. 書式
書き方:
np.random.permutation(x)
パラメーター:
x: int or array_like xが整数(int)の場合は、np.arange(x)の配列をランダムに並べ替える。xが配列の場合は、その配列をコピーして要素をランダムに並べ替える。 |
戻り値:
out: ndarray 要素を並べ替えた配列 |
一緒に確認したい関数:
- Generator.permutation: ジェネレータメソッド。今後はrandom.permutationではなく、こちらを使うこと。
- shuffle: 既存の配列の要素をランダムに並べ替える
2. サンプルコード
引数に整数を与えた場合は、np.arange(x)の配列の要素をランダムに並べ替えます。np.arangeは『numpy.arange – 色々な連番の配列を生成する』で解説しています。
import numpy as np
np.random.permutation(10)
# >>> np.arange(x)を渡すのと同じ
リストやタプルなどの配列オブジェクト(array_like)を渡すこともできます。
np.random.permutation([1, 3, 5, 7, 11, 13])
多次元配列を渡した場合は、最初の軸に沿って並べ替えます。たとえば2次元配列を渡すと、行をランダムに並べ替えます。
# 2次元配列を渡すと行を並べ替える。
arr = np.arange(9).reshape((3, 3))
np.random.permutation(arr)
コードは書きませんが、3次元配列の場合は奥行きのみをランダムに並べ替えます。
なお、Generator.permutationではオプション引数 axis が追加され、多次元配列を渡した場合に、並べ替える軸を指定することが可能になっています。
3. まとめ
以上、numpy.random.permutationは、配列の要素をランダムに並べ替える関数です。現在は、この関数は使わず、Generator.permutationというジェネレータメソッドを使います。
このような変更が行われた最大の理由は、処理の高速化にあります。科学技術計算では、大量のデータを扱うため高速性が必須なのです。
今後はGenerator.permutationで一本化するようにしましょう。
コメント