Python使用numpy实现对数组随机打乱并排序

Python使用numpy实现对数组随机打乱并恢复

在使用Python进行科学运算时,我们经常会将列表打乱,进行一些运算以后再将列表恢复成原来的顺序,那具体该怎么实现呢?下面给出参考代码:

import numpy as np
# 给出原始列表
raw = np.array([1,3,5,7,9,2,4,6,8])
# 将列表(numpy数组)打乱
index = np.random.permutation(raw.size)
raw = raw[index] # 此时数组已经打乱
# .......经过了一些操作以后....... 
raw = raw[np.argsort(index)]  # 此时raw的顺序就和初始一样啦

现在我们来分析一下这段代码,首先第三行我们首先将列表转换为一个numpy数组,为了方便后续操作;其次,第五行我们调用.size方法,获取raw数组的大小,接着使用numpy中的random.permutation()函数,生成从0到raw.size(在本例中也就是0-8)这几个数随机排列的数组,我们以其为下标,对数组raw进行打乱处理,即第六行。最后,我们对index数组调用numpy中的argsort函数,保存将index从小到大排序对应的下标,即raw之前为打乱之前的下标,这里稍微有点绕,请读者认真思考一下,最后将index排序以后对应的下标重新作为raw的下标,就可以恢复raw之前的顺序啦!
学习更多编程知识,请关注微信公众号编程技术栈,一起学习进步!编程技术栈

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wind_freedom

觉得写的不错就鼓励一下小编吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值