Python中NumPy库提供的函数——np.random.permutation的基本用法

文章介绍了NumPy库中的np.random.permutation函数,用于生成随机排列,常用于数据随机化,如打乱训练数据和标签对以提升模型泛化性能。示例代码展示了如何在shuffle_dataset函数中使用该功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本用法:

np.random.permutation是 NumPy 库中的一个函数,用于返回一个随机排列(重置)给定的副本的副本。与不同的情况,不会修改np.random.shuffle原始np.random.permutation副本,而是返回一个新的副本,其中包含原始副本元素的随机排列。

该函数的基本语法如下:

numpy.random.permutation(x)

其中,x是要随机排列的数组或整数。如果x是一个整数n,则函数将返回一个包含范围[0, n)内整数的随机排列。

示例用法:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
permuted_arr = np.random.permutation(arr)
print(permuted_arr)  # 可能输出类似 [3, 1, 4, 5, 2] 的随机排列

# 随机排列整数范围
permuted_range = np.random.permutation(10)
print(permuted_range)  # 可能输出类似 [4, 2, 8, 1, 9, 0, 7, 3, 5, 6] 的随机排列

 np.random.permutation可以用于数据的随机化,生成随机的索引顺序,也可以用于生成经常随机的样本或数据排列。这在数据处理和深度学习中有用。

二、实战代码举例:

def shuffle_dataset(x, t):
    """打乱数据集

    Parameters
    ----------
    x : 训练数据
    t : 监督数据

    Returns
    -------
    x, t : 打乱的训练数据和监督数据
    """
    permutation = np.random.permutation(x.shape[0])
    x = x[permutation,:] if x.ndim == 2 else x[permutation,:,:,:]
    t = t[permutation]

    return x, t

上述代码定义了一个名为shuffle_dataset的函数,用于随机打乱输入数据x和对应的标签t。它的作用是保证数据和标签的顺序是随机的,通常用于数据集的计算,以提高训练模型的随机性和泛化性能。

下面是这个函数的详细解释:

  • permutation = np.random.permutation(x.shape[0]):首先,生成一个包含x样本数量(行数)的随机排列(排列)。该排列被存储在permutation变量中,用于打乱数据的顺序。

  • x = x[permutation,:] if x.ndim == 2 else x[permutation,:,:,:]:接下来,根据x维度来选择合适的索引方式,重新排列x的行。如果x是二维阵列(例如,样本数 x 特征数),则将重新排列;如果x是三维阵列(例如,样本数) x通道x高度x宽度),则将通道方向的数据也重新排列。这确保了数据和标签的对应关系不会被破坏。

  • t = t[permutation]:对应,标签t也按照相同的随机排列重新排列,以确保每个标签与对应的数据仍然匹配。

  • 最后,函数返回重新排列后面的数据x和标签t

通过调用该函数,可以在每个训练周期或数据加载时随机打乱数据的顺序,这有助于模型更好地学习数据的分布,并提高模型的泛化性能。

### PythonNumPy`random.permutation`函数的使用 #### 函数概述 `np.random.permutation(x)`用于随机排列序列。如果传入的是整数,则会先构建一个从 `0` 到该整数值减一的数组再进行随机排列;如果是多维数组则只沿第一个轴打乱元素位置[^1]。 #### 使用示例 ##### 示例 1:对列表或一维数组执行随机排列 当输入为一维数组时,将会返回一个新的含有相同元素但是顺序被打乱的一维数组: ```python import numpy as np arr = np.array([1, 2, 3, 4, 5]) permuted_arr = np.random.permutation(arr) print("原始数组:", arr) print("随机排列后的数组:", permuted_arr) ``` 上述代码可能会输出如下结果: ``` 原始数组: [1 2 3 4 5] 随机排列后的数组: [3 1 4 5 2] ``` ##### 示例 2:对指定范围内整数执行随机排列 对于给定的一个正整数n作为参数传递给此函数,它将创建并返回长度为n且由 `[0,..., n-1]` 组成的新数组,并对其进行随机重排: ```python permuted_range = np.random.permutation(10) print("随机排列后的范围:", permuted_range) ``` 这可能得到像这样的输出: ``` 随机排列后的范围: [4 2 8 1 9 0 7 3 5 6] ``` ##### 示例 3:处理二维或多维数组的情况 当应用于更高维度的数据结构时,仅会对最外层(即第一轴)上的子数组做重新排序操作而不影响内部数据布局: ```python matrix = np.arange(12).reshape((4, 3)) shuffled_matrix = np.random.permutation(matrix) print("原矩阵:\n", matrix) print("\n经过permutation之后的结果:\n", shuffled_matrix) ``` 这段程序可以产生类似以下形式的结果: ``` 原矩阵: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 经过permutation之后的结果: [[ 6 7 8] [ 0 1 2] [ 9 10 11] [ 3 4 5]] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值