python 实现以相同规律打乱多组数据
作者:DX_ByYourself 发布时间:2021-09-21 14:28:18
在深度学习的数据训练过程中,虽然tensorflow和pytorch都会自带打乱数据进行训练的方法,但是当我们自己生成数据,或者某些情况下依然要自己手动打乱顺序。
这里介绍如何以相同规律打乱X,Y两组数据,多组数据相同道理。
第一种:(X,Y是list的格式,不是array)
产生相同的种子(seed)打乱顺序:
import random
seed =50
x_batch, y_batch,start_num = train_load_order_sharp_5_9(image_list, num, start_num,length)
#加载我所有的数据,这里想x_batch,Y_batch是list的格式,要注意
random.seed(seed)
random.shuffle(x_batch)
random.seed(seed)#一定得重复在写一遍,和上面的seed要相同,不然y_batch和x_batch打乱顺序会不一样
random.shuffle(y_batch)
第二种:zip的方式,更加高效:(同第一种,X,Y是list的格式,不是array)
from random import shuffle
shuffle_data=True
if shuffle_data:
c = list(zip(x_batch,y_batch))
shuffle(c)
x_batch,y_batch = zip(*c)
举个例子:
>>> a=[1,2,3,4]
>>> b=[11,22,33,44]
>>> c=list(zip(a,b))
>>> shuffle(c)
>>> a,b = zip(*c)
>>> a
(2, 4, 3, 1)
>>> b
(22, 44, 33, 11)
#这里就让a,b以相同的规律被打乱
补充:python打乱列表的方法解决问题_Python 如何随机打乱列表(List)排序
现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。
专业点的术语:将一个容器中的数据每次随机逐个遍历一遍。
注意:不是生成一个随机的list集。
环境:
Python 3.6
解决方案:
方案一:
有人可能会通过Random内置函数,来间接实现想要的结果。但是这种方式,太原始,也不够优雅,而且有种重复造轮子的嫌疑。这里我就不贴我自己通过random实现的效果了。
方案二:
Random中有一个random.shuffle()方法提供了完美的解决方案。代码如下:
x = [1,2,3,4,5,6]
random.shuffle(x)
print(x)
输出结果:
第一次输出内容:[6, 5, 1, 3, 2, 4]
第二次输出内容:[6, 1, 3, 5, 2, 4]
第三次输出内容:[5, 3, 1, 2, 4, 6]
从结果我们可以看出,输出是完全随机的,代码量就两行,不需要random,不需要for循环。
源码解读:
def shuffle(self, x, random=None):
"""Shuffle list x in place, and return None.
原位打乱列表,不生成新的列表。
Optional argument random is a 0-argument
function returning a random float in [0.0, 1.0);
if it is the default None,
the standard random.random will be used.
可选参数random是一个从0到参数的函数,返回[0.0,1.0)中的随机浮点;
如果random是缺省值None,则将使用标准的random.random()。
"""
if random is None:
randbelow = self._randbelow
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = randbelow(i + 1)
x[i], x[j] = x[j], x[i]
else:
_int = int
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = _int(random() * (i + 1))
x[i], x[j] = x[j], x[i]
注意 :
从代码的注释,我们看到random.shuffle()是对原list做修改,如果需要保留原list,请注意这个细节。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/CV_YOU/article/details/82178844


猜你喜欢
- 用过MySQL之后,不论容量的话,发现比其他两个(sql server 、oracle)好用的多,一下子就喜欢上了。下面给那些还不知道怎么弄
- 基数排序法又称桶子法(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶&
- 本文实例讲述了Python实现手写一个类似django的web框架。分享给大家供大家参考,具体如下:用与django相似结构写一个web框架
- 1. Vue 路由权限控制一般有2种方法a、路由元信息(meta)b、动态加载菜单和路由(addRoutes)2 路由元信息(meta)来进
- 一、概述索引太少,查询效率低;索引太多程序性能受到影响,索引的使用应该贴合实际情况。Innodb 支持的索引包括:全文检索,使用倒排索引哈希
- filecmp定义了两个函数,用于方便地比较文件与文件夹: filecmp.cmp(f1, f2[, shallow]): 比较两个文件的内
- 题目:1. 利用拉格朗日乘子法#导入sympy包,用于求导,方程组求解等等from sympy import * #设置变量x1 = sym
- 字符串是Python中最常用的数据类型1、创建字符串1.1 使用 ’ ’ 或 " &quo
- 一. 引入话题MySQL是一款广泛使用的开源数据库管理系统,它具有高效、稳定、可靠等优点,并支持多种操作系统和编程语言。然而,在使用MySQ
- 因为写js经常需要用到访问样式,我们常用的做法是通过 DOM.style.XXX来读写样式信息的。可是DOM.style这种写法只能访问&l
- 正在编写的程序用的很多Windows下的操作,查了很多资料。看到剪切板的操作时,想起以前想要做的一个小程序,当时也没做,现在正好顺手写完。功
- 众所周知道,IE向来是我们在制作网页时最难搞定的对手。但又迫于其用户群数量之多,我们不得不想法设法搞定它。下面,将介绍的将是利用其特点而被发
- 关于骨架屏介绍骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示。这样给用户一种很自然的过渡,不会造成页面长时间
- vue3 表单验证前言表单验证可以有效的过滤不合格的数据,减少服务器的开销,并提升用户的使用体验。今天我们使用 vue3 来做一个表单验证的
- 嗯,你可以说我很无聊。最近疯狂加班,今天才得以有时间搞一个CSS的像素图来消遣休息下。先看效果:运行代码框<!DOCTYPE html
- 通过Python脚本批量生成插入数据的SQL语句原始SQL语句:INSERT INTO system_user (id, login_nam
- 在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Stude
- 以下实例用于判断一个数字是否为奇数或偶数:# -*- coding: UTF-8 -*-# Filename : test.py# Pyth
- 简介这篇博客涉及的脚本用来将bag文件批量转化为mp4文件dockerfileFROM osrf/ros:kinetic-desktop-f
- VueConf ,尤大说, Vue 支持 Ts 了,网上关于 Vue + Ts 的资料有点少, 楼主踩了一个星期坑,终于摸明白了 修饰器 的