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

numpy.random.shuffleは、渡した配列の要素をランダムに並べ替える関数です。

同じような関数に、numpy.random.permutationがあります。両者の違いは、shuffleは引数に渡した配列の要素を並べ替えるのに対して、permutationは渡した配列の要素を並べ替えた新しい配列を生成する点にあります。

このページではshuffleについて解説します。

重要
NumPyのversion1.17以降は、乱数操作には、関数は使わずにジェネレータメソッドを使うようになりました。最大の理由は、ジェネレータから乱数を生成する方が遥かに高速であり、科学技術計算に適しているからです。そのため、現在はrandom.shuffle関数の使用は推奨されておらず、代わりにGenerator.shuffleを使います。『Generator.shuffle – 既存の配列の要素をランダムに並べ替え』で解説しています。

目次

1. 書式

numpy.random.shuffle

書き方:

np.random.shuffle(x)

パラメーター:

x: array_like
シャッフルする配列やリストを渡す。

戻り値: 

None

一緒に確認したい関数:

  • Generator.shuffle: ジェネレータメソッド。今後はrandom.shuffleではなく、こちらを使うこと。
  • permutation: 渡した配列の要素を並べ替えた新しい配列を生成

2. サンプルコード

random.shuffle関数に配列を渡すと、渡した配列の要素をランダムに並べ替えます。

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

上のコードの中で使っているnp.arange関数は『numpy.arange – 色々な連番の配列を生成する』で解説しています。

多次元配列の場合は、最初の軸(axis=0)に沿って並べ替えます。

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

random.shuffle関数では要素を並べ替える軸を指定することはできませんが、後述するGenerator.shuffleではそれが可能になっています。

なお、上のコードの中で使っているndarray.reshapeメソッドについては『numpy.reshape – 配列の形状(shape)を変換』で解説しています。

3. まとめ

以上、numpy.random.shuffleは、配列の要素をランダムに並べ替える関数です。現在は、この関数は使わず、Generator.shuffleというジェネレータメソッドを使います。

このような変更が行われた最大の理由は、処理の高速化にあります。科学技術計算では、大量のデータを扱うため高速性が必須なのです。

今後は、Generator.shuffleで一本化するようにしましょう。



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

この記事を書いた人

コメント

コメントする

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

目次
閉じる