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 次元目に等しく、入力配列の長さを超えてはいけません。
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]