Generator.permutation – 既存の配列の要素をランダムに並べ替えた新しい配列を生成

Generator.permutationは、NumPyのrandomモジュールで、既存の配列の要素をランダムに並べ替えた新しい配列を生成するためのジェネレータメソッドです。

これと同じ操作は、NumPyのversion1.17までは random.permutation関数で行っていました。しかし現在では、default_rng で作成したインスタンス(「ジェネレータオブジェクト」とも言う)に対して、Generator.permutationメソッドを呼び出すことで行うようになりました。

なお、default_rng については、『numpy.random.default_rng – 乱数生成のためのジェネレータオブジェクトの作成』で解説しているので確認しておいて下さい。

このページでは、このGenerator.permutationの使い方を解説します。こちらの方が従来の関数を使った乱数生成よりも大幅に高速で、大量のデータを扱う科学技術計算に適していますので、ぜひ抑えておきましょう。

目次

1. 書式

Generator.permutation

書き方:

Generator.permutation(x, axis=0)

パラメーター:

x: int or array_like
xが整数(int)の場合は、np.arange(x)の配列をランダムに並べ替える。xが配列の場合は、その配列をコピーして要素をランダムに並べ替える。
axis: int, optional
配列を並べ替える軸を指定する。デフォルト値は0。

戻り値: 

out: ndarray
要素を並べ替えた配列

一緒に確認したい関数:

2. サンプルコード

ジェネレータメソッドは、すべて default_rng で作成したインスタンスに対して使用します。これについては、以下のページで解説しています。

インスタンスの作成は、以下のコードのように、任意の変数にdefault_rng を代入することで行います。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng
Out[1]:
Generator(PCG64) at 0x7FE45029E408

これで、ジェネレータオブジェクトの rng が作成されました。このジェネレータオブジェクト rng に対して permutation メソッドを使います。

それではサンプルコードを見ていきましょう。

第一引数 x に並べ替える配列を渡す

第一引数に整数(int)を渡すと、np.arange(x)を渡しのと同じことになります。np.arangeは『numpy.arange – 色々な連番の配列を生成する』で解説しています。

In [1]:
import numpy as np
rng = np.random.default_rng()
rng.permutation(10)
Out[1]:
array([2, 4, 0, 9, 3, 8, 1, 7, 6, 5])

リストやタプルなどの配列オブジェクト(array_like)を渡すこともできます。

In [2]:
rng.permutation([1, 3, 5, 7, 11, 13])
Out[2]:
array([ 5, 11, 13,  3,  1,  7])

axis の指定

オプション引数 axis では、多次元配列を渡した場合に、並べ替えの軸を指定することができます。デフォルトでは最初の軸(axis=0)で並べ替えます。

具体的には、以下のように行を並べ替えます。

In [3]:
arr = np.arange(9).reshape((3, 3))
rng.permutation(arr)
Out[3]:
array([[3, 4, 5],
       [6, 7, 8],
       [0, 1, 2]])

オプション引数で axis= 1を指定すると、列を並べ替えます。

In [4]:
rng.permutation(arr, axis=1)
Out[4]:
array([[2, 0, 1],
       [5, 3, 4],
       [8, 6, 7]])

もちろん3次元配列以上でも、axis を指定することによって、並べ替えの軸を操作することが可能です。

3. まとめ

以上が Generator.permutationの使い方です。これまでは、同じ操作をするのに、numpy.random.permutation関数が使われてきましたが、これからはこの Generator.permutationを使うようにしていきましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる