np.random.permutation函数

本文介绍了numpy.random.permutation函数的用途和用法,包括如何直接处理数组和列表,以及如何通过下标处理数据而不改变原数据。在数据预处理时,该函数常用于打乱数据集的顺序。此外,还展示了鸢尾花数据集的随机打乱操作,以演示在实际应用中的使用方式。

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

目录

一:函数介绍

二:实例

2.1 直接处理数组或列表数

2.2 间接处理:不改变原数据(对数组下标的处理)

2.3 实例:鸢尾花数据中对鸢尾花的随机打乱(可以直接用)


一:函数介绍

np.random.permutation() 总体来说他是一个随机排列函数,就是将输入的数据进行随机排列,官方文档指出,此函数只能针对一维数据随机排列,对于多维数据只能对第一维度的数据进行随机排列。

简而言之:np.random.permutation函数的作用就是按照给定列表生成一个打乱后的随机列表

在处理数据集时,通常可以使用该函数进行打乱数据集内部顺序,并按照同样的顺序进行标签序列的打乱。

二:实例

2.1 直接处理数组或列表数

import numpy as np

data = np.array([1,2,3,4,5,6,7])
a = np.random.permutation(data)
b = np.random.permutation([5,0,9,0,1,1,1])
print(a)
print( "data:", data )
print(b)

2.2 间接处理:不改变原数据(对数组下标的处理)

label = np.array([1,2,3,4,5,6,7])
a = np.random.permutation(np.arange(len(label)))
print("Label[a] :" ,label[a] )

补:一般只能用于N维数组 只能将整数标量数组转换为标量索引

why?label1[a1]  label1是列表,a1是列表下标的随机排列 但是! 列表结构没有标量索引 label1[a1]报错

label1=[1,2,3,4,5,6,7]
print(len(label1))

a1 = np.random.permutation(np.arange(len(label1)))#有结果

print(a1)

print("Label1[a1] :" ,label1[a1] )#这列表结构没有标量索引 所以会报错

2.3 实例:鸢尾花数据中对鸢尾花的随机打乱(可以直接用)

from sklearn import svm
from sklearn import datasets #sklearn 的数据集
iris = datasets.load_iris()
iris_x = iris.data
iris_y = iris.target
indices = np.random.permutation(len(iris_x))

#此时 打乱的是数组的下标的排序
print(indices)
print(indices[:-10])#到倒数第10个为止
print(indices[-10:])#最后10个

# print(type(iris_x))   <class 'numpy.ndarray'>

#9:1分类
#iris_x_train = iris_x[indices[:-10]]#使用的数组打乱后的下标
#iris_y_train = iris_y[indices[:-10]]
#iris_x_test= iris_x[indices[-10:]]
#iris_y_test= iris_y[indices[-10:]]    

数组下标 即标量索引的重新分布情况: 下标是0开始

<think>好的,我现在要解决用户提到的Kali Linux旧源未签名错误的问题。用户遇到的错误是使用旧源'http://old.kali.org/kali sana InRelease'导致的,系统提示仓库未签名,无法安全更新。我需要根据已有的引用信息和自己的知识来提供解决方案。 首先,我需要回忆一下Kali Linux的源配置。通常,这类问题是由于软件源过期密钥失效引起的。用户提到的错误信息中提到EXPKEYSIG ED444FF07D8D0BF6,这可能与仓库的签名密钥有关。但用户现在使用的是旧源sana,而引用中提到的错误是kali-rolling的密钥问题,不过问题根源可能类似,都是密钥过期源地址不正确。 根据引用中的例子,比如引用[1]和[2],用户尝试使用不同的镜像源(如阿里云、USTC)时出现GPG错误解决办法通常是更新密钥者更换正确的源。而用户现在的问题是旧源sana,这可能是一个已经不再支持的版本,所以需要更换到当前支持的源。 步骤应该是: 1. 检查当前系统中的源配置,确认是否确实在使用旧的sana源。 2. 替换旧的源地址为官方推荐的最新源,比如kali-rolling的镜像。 3. 导入正确的GPG密钥,确保仓库签名有效。 4. 执行更新命令验证问题是否解决。 另外,可能需要手动下载并安装新的密钥,者使用wget命令从官方获取密钥并添加到apt-key中。例如,引用中提到的ED444FF07D8D0BF6可能已经过期,需要更新。 还需要注意,Kali Linux的不同版本可能对应不同的仓库名称,比如sana是旧版本,现在应该使用kali-rolling。因此,用户需要更新源列表中的条目,将sana替换为kali-rolling,并选择合适的镜像源。 另外,用户可能还需要清理旧的源列表,避免残留的旧配置导致问题。例如,检查/etc/apt/sources.list文件以及/etc/apt/sources.list.d/目录下的文件,删除注释掉所有涉及旧源sana的行。 最后,执行apt-get updateapt-get upgrade来测试是否解决问题。如果仍有GPG错误,可能需要手动导入新的密钥,比如使用apt-key adv命令。 总结解决方案步骤: 1. 备份当前源列表。 2. 编辑源列表,替换旧源为最新镜像源。 3. 导入新的GPG密钥。 4. 更新并升级系统。 同时,需要提醒用户在操作前备份重要数据,避免操作失误导致系统问题。</think>### 解决方案:Kali Linux旧源未签名错误处理 #### 问题根源分析 错误提示`The repository 'http://old.kali.org/kali sana InRelease' is not signed`表明: 1. 系统正在使用已弃用的旧版Kali源(`sana`为2016年发布的版本,当前官方仅支持`kali-rolling`)[^1][^4]; 2. 旧仓库的GPG密钥已失效,导致APT无法验证软件包安全性。 --- #### 分步解决方法 1. **备份当前源列表** ```bash sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak ``` 2. **更新为官方推荐镜像源** 编辑源配置文件: ```bash sudo nano /etc/apt/sources.list ``` 删除注释所有包含`old.kali.org``sana`的行,替换为以下内容(以阿里云镜像为例): ```plaintext deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib ``` 3. **手动导入最新GPG密钥** ```bash wget -q -O - https://archive.kali.org/archive-key.asc | sudo apt-key add ``` 4. **执行系统更新** ```bash sudo apt-get update && sudo apt-get upgrade -y ``` --- #### 验证结果 若操作成功,终端应输出类似以下信息: ```plaintext Hit:1 http://mirrors.aliyun.com/kali kali-rolling InRelease Reading package lists... Done ``` --- #### 注意事项 - 若使用其他镜像(如清华、中科大),需确保URL中为`kali-rolling`而非`sana`[^2][^3] - 若仍报GPG错误,尝试强制刷新密钥: ```bash sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ED444FF07D8D0BF6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值