NumPy は 2つの配列をシャッフルする

Muhammad Maisam Abbas 2023年1月30日
  1. Python の sklearn.utils.shuffle() 関数を使用して 2つの配列をシャッフルする NumPy
  2. NumPy は numpy.random.shuffle() 関数を使用して 2つの配列をシャッフルする
  3. NumPy は、Python の numpy.random.permutation() 関数を使用して、対応する 2つの配列をシャッフルする
NumPy は 2つの配列をシャッフルする

このチュートリアルでは、Python で 2つの NumPy 配列をシャッフルする方法を紹介します。

Python の sklearn.utils.shuffle() 関数を使用して 2つの配列をシャッフルする NumPy

同じ長さまたは同じ先行次元の 2つの配列があり、両方の配列の対応する要素が対応したままになるように、両方をシャッフルしたいとします。その場合、Python の sklean.utils ライブラリ内で shuffle() 関数を使用できます。この shuffle() 関数は、配列を入力パラメーターとして受け取り、それらを一貫してシャッフルし、各配列のシャッフルされたコピーを返します。次のコード例を参照してください。

import numpy as np
from sklearn import utils

array1 = np.array([[0, 0], [1, 1], [2, 2]])
array2 = np.array([0, 1, 2])

array1, array2 = utils.shuffle(array1, array2)
print(array1)
print(array2)

出力:

[[0 0]
 [2 2]
 [1 1]]
[0 2 1]

上記のコードでは、Python の sklearn.utils ライブラリ内の shuffle() 関数を使用して、array1array2 の 2つの配列をシャッフルしました。最初に、np.array() 関数を使用して両方の配列を作成しました。次に、sklearn.utils ライブラリ内の shuffle() 関数を使用して配列をシャッフルし、シャッフルされた配列を array1array2 内に保存しました。最後に、両方の配列内の要素を出力しました。出力は、シャッフルした後でも、両方の配列の要素が対応していることを示しています。

NumPy は numpy.random.shuffle() 関数を使用して 2つの配列をシャッフルする

sklearn パッケージをインポートせず、NumPy パッケージを使用して前の目標と同じ目標を達成したい場合は、numpy.random ライブラリ内の shuffle() 関数を使用できます。この shuffle() 関数はシーケンスを受け取り、それをランダム化します。次に、このランダム化されたシーケンスを 2つの配列のインデックスとして使用して、それらをシャッフルできます。次のコード例は、numpy.random.shuffle() 関数を使用して 2つの配列をシャッフルする方法を示しています。

import numpy as np

array1 = np.array([[0, 0], [1, 1], [2, 2]])
array2 = np.array([0, 1, 2])

randomize = np.arange(len(array2))

np.random.shuffle(randomize)

array1 = array1[randomize]
array2 = array2[randomize]
print(array1)
print(array2)

出力:

[[2 2]
 [0 0]
 [1 1]]
[2 0 1]

最初に、np.array() 関数を使用して配列を作成しました。次に、np.arange(len(array2)) 関数を使用して、2 番目の配列の長さに等しい整数のシーケンスを作成しました。その後、np.random ライブラリ内の shuffle() 関数を使用してシーケンスをランダム化し、両方の配列がそれらをシャッフルするためのインデックスとして使用しました。

NumPy は、Python の numpy.random.permutation() 関数を使用して、対応する 2つの配列をシャッフルする

numpy.random ライブラリ内の permutation() 関数を使用して、Python で指定された範囲内の整数のランダム化されたシーケンスを作成することもできます。このシーケンスは、両方の配列のインデックスとして使用して、それらをシャッフルできます。

import numpy as np


def shuffle(x, y):
    p = np.random.permutation(len(y))
    return x[p], y[p]


array1 = np.array([[0, 0], [1, 1], [2, 2]])
array2 = np.array([0, 1, 2])

array1, array2 = shuffle(array1, array2)
print(array1)
print(array2)

出力:

[[0 0]
 [2 2]
 [1 1]]
[0 2 1]

上記のコードでは、2つの配列を受け取り、Python の numpy.random ライブラリ内の permutation() 関数を使用してそれらをランダム化する関数 shuffle() を定義しました。ランダム化されたシーケンスの長さは、len(y) 関数を使用して 2 番目の配列の要素数と等しくなるように指定しました。次に、ランダム化されたシーケンス p を両方の配列のインデックスとして使用し、それらを返しました。shuffle() 関数によって返されるシャッフルされた配列は、array1 および array2 配列内に格納されます。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn