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 数组中。