Python で配列をシャッフルする

Muhammad Waiz Khan 2023年10月10日
  1. Python で配列をシャッフルする random.shuffle() メソッドを使用する
  2. shuffle() メソッドを用いた Python での配列のシャッフル
Python で配列をシャッフルする

このチュートリアルでは、Python で配列をシャッフルする様々な方法を見ていきます。配列のシャッフルとは、配列内の要素の位置を再配置することを意味します。配列のシャッフルのアプリケーションの 1つはモデルのトレーニングで、モデルのトレーニング品質を向上させるためにデータセットをシャッフルする必要があります。また、統計学の多くのアプリケーションでも使用することができます。

Python で配列をシャッフルする random.shuffle() メソッドを使用する

random.shuffle() メソッドはシーケンスを入力として受け取り、それをシャッフルします。ここで注意すべき重要なことは、random.shuffle() は新しいシーケンスを出力として返すのではなく、元のシーケンスをシャッフルするということです。したがって、有効な入力シーケンスは配列やリストなどのような変異可能なデータ型のみとなります。

random.shuffle() メソッドは 1 次元シーケンスに対してのみ動作します。以下の例では、random.shuffle() を用いて Python で配列をシャッフルする方法を示します。

import random
import numpy as np

mylist = ["apple", "banana", "cherry"]
x = np.array((2, 3, 21, 312, 31, 31, 3123, 131))

print(x)
print(mylist)

random.shuffle(mylist)
random.shuffle(x)

print(x)
print(mylist)

出力:

[   2    3   21  312   31   31 3123  131]
['apple', 'banana', 'cherry']
[3123   21  312    3    2  131   31   31]
['banana', 'apple', 'cherry']

shuffle() メソッドを用いた Python での配列のシャッフル

sklearn.utils.shuffle(array, random_state, n_samples) メソッドは、同じ 1 次元の配列、リスト、データフレームなどのインデックス可能なシーケンスを入力として受け取り、入力として与えられたシャッフルされたシーケンスのコピーを返します。

sklearn.utils.shuffle() は元の入力を変更しませんが、シャッフルされたコピーを返します。入力は単一配列でも複数配列でも構いません。パラメータ random_state は数値のランダム生成を制御するために用いられます。これが整数に設定されている場合、このメソッドは毎回同じシャッフルされたシーケンスを返します。n_samples はサンプル数を表し、デフォルト値は入力のデフォルト値の 1 次元目に等しく、入力配列の長さを超えてはいけません。

注意
入力が 2 次元の場合、sklearn.utils.shuffle() メソッドは行をシャッフルするだけです。

以下の例は、sklearn.utils.shuffle() メソッドを用いて、Python でシャッフルされた配列を取得する方法を示しています。

from sklearn.utils import shuffle
import numpy as np

x = np.array([[1, 2, 3], [6, 7, 8], [9, 10, 12]])
y = ["one", "two", "three"]
z = [4, 5, 6]

print(x)
print(y)
print(z)

x, y, z = shuffle(x, y, z, random_state=0)

print(x)
print(y)
print(z)

出力:

[[ 1  2  3]
 [ 6  7  8]
 [ 9 10 12]]
['one', 'two', 'three']
[4, 5, 6]
[[ 9 10 12]
 [ 6  7  8]
 [ 1  2  3]]
['three', 'two', 'one']
[6, 5, 4]

関連記事 - Python Array