Generator.shuffle – 既存の配列の要素をランダムに並べ替え

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

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

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

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

目次

1. 書式

Generator.shuffle

書き方:

Generator.shuffle(x, axis=0)

パラメーター:

x: array_like
シャッフルする配列やリストを渡す。
axis: int, optional
配列の要素をどの軸で並べ替えるかを指定する。デフォルト値は0。xに配列を渡した時のみ使用可能。

戻り値: 

None

一緒に確認したい関数:

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

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 に対して shuffle メソッドを使います。

それでは確認していきましょう。

以下のコードのように、shuffleは、引数に渡した配列そのものの要素の並びをランダムに並べ替えます。なお、コード中のnp.arange関数については『numpy.arange – 色々な連番の配列を生成する』で解説しています。

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

オプション引数 axis の指定

Generator.shuffleでは、多次元配列を渡した時に、オプション引数 axis= で要素を並べ替える軸を指定することができます。これは、random.shuffle関数にはなかった機能です。

まず、デフォルト値は axis=0 なので、2次元配列をそのまま渡すと行をランダムに並べ替えます。なお、コード中で使っているreshapeメソッドについては『numpy.reshape – 配列の形状(shape)を変換』で解説しています。

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

axis=1 を指定すると列をランダムに並べ替えます。

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

3. まとめ

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



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる