HOWTO · NumPy

NumPy Shuffle 兩個陣列

Python 中可以使用三種主要方法對兩個對應的陣列進行 shuffle,分別是 sklearn.utils.shuffle() 函式、numpy.random.shuffle() 函式和 numpy.random.permutation() 函式。

本頁內容

本教程將介紹如何在 Python 中對兩個 NumPy 陣列進行 shuffle。

NumPy 使用 Python 中的 sklearn.utils.shuffle() 函式對兩個陣列進行混洗

假設我們有兩個長度相同或前導維度相同的陣列,並且我們希望以兩個陣列中的相應元素保持對應的方式對它們進行混洗。在這種情況下,我們可以使用 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 進行了混洗。我們首先使用 np.array() 函式建立了兩個陣列。然後,我們使用 sklearn.utils 庫中的 shuffle() 函式對陣列進行打亂,並將打亂的陣列儲存在 array1array2 中。最後,我們列印了兩個陣列中的元素。輸出顯示兩個陣列的元素即使在改組後也是對應的。

NumPy 使用 numpy.random.shuffle() 函式對兩個陣列進行洗牌

如果我們不想匯入 sklearn 包並希望通過使用 NumPy 包實現與前一個相同的目標,我們可以使用 numpy.random 庫中的 shuffle() 函式。這個 shuffle() 函式接受一個序列並將其隨機化。然後我們可以使用這個隨機序列作為兩個陣列的索引來對它們進行混洗。下面的程式碼示例向我們展示瞭如何使用 numpy.random.shuffle() 函式對兩個陣列進行混洗。

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)) 函式建立了一個整數序列,該序列等於第二個陣列的長度。之後,我們使用 np.random 庫中的 shuffle() 函式對序列進行隨機化,並將其用作兩個陣列的索引以對其進行洗牌。

NumPy 使用 Python 中的 numpy.random.permutation() 函式打亂兩個對應的陣列

我們還可以使用 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]

在上面的程式碼中,我們定義了一個函式 shuffle(),它接受兩個陣列,並使用 Python 中 numpy.random 庫中的 permutation() 函式將它們隨機化。我們使用 len(y) 函式指定隨機序列的長度等於第二個陣列中的元素數。然後我們使用隨機序列 p 作為兩個陣列的索引並返回它們。shuffle() 函式返回的混洗陣列儲存在 array1array2 陣列中。