python 实现以相同规律打乱多组数据

在深度学习的数据训练过程中,虽然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,请注意这个细节。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • 对python打乱数据集中X,y标签对的方法详解

    今天踩过的两个小坑: 一.用random的shuffle打乱数据集中的数据-标签对 index=[i for i in range(len(X_batch))] # print(type(index)) index=random.shuffle(index) 结果shuffle完以后index变成None了,看了下api,这样说明的: 这个函数如果返回值,就返回None,所以用index=balabala就把index的内容改变了.去掉index=random.shuffle(index)等号前

  • Python Pandas 如何shuffle(打乱)数据

    在Python里面,使用Pandas里面的DataFrame来存放数据的时候想要把数据集进行shuffle会许多的方法,本文介绍两种比较常用而且简单的方法. 应用情景: 我们有下面以个DataFrame 我们可以看到BuyInter的数值是按照0,-1,-1,2,2,2,3,3,3,3这样排列的,我们希望不保持这个次序,但是同时列属性又不能改变,即如下效果: 实现方法: 最简单的方法就是采用pandas中自带的 sample这个方法. 假设df是这个DataFrame df.sample(fra

  • python训练数据时打乱训练数据与标签的两种方法小结

    如下所示: <code class="language-python">import numpy as np data = np.array([[1,1],[2,2],[3,3],[4,4],[5,5]]) y = np.array([1,2,3,4,5]) print '-------第1种方法:通过打乱索引从而打乱数据,好处是1:数据量很大时能够节约内存,2每次都不一样----------' data = np.array([[1,1],[2,2],[3,3],[4,4

  • python 实现以相同规律打乱多组数据

    在深度学习的数据训练过程中,虽然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, n

  • python中将两组数据放在一起按照某一固定顺序shuffle的实例

    有的时候需要将两组数据,比如特征和标签放在一起随机打乱, 但是又想记录这种打乱的顺序,那么该怎么做呢?下面是一个很好的方法: b = [1, 2,3, 4, 5,6 , 7,8 ,9] a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h','i'] c = list(zip(a, b)) print(c) random.Random(100).shuffle(c) print(c) a, b = zip(*c) print(a) print(b) 输出: [('

  • python使用正则表达式替换匹配成功的组

    正则表达式简介 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 许多程序设计语言都支持利用正则表达式进行字符串操作.例如,在Perl中就内建了一个功能强大的正则表达式引擎.正则表达式这个概念最初是由Unix中的工

  • python使用正则表达式替换匹配成功的组并输出替换的次数

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍python使用正则表达式替换

  • 基于python实现计算两组数据P值

    我们在做A/B试验评估的时候需要借助p_value,这篇文章记录如何利用python计算两组数据的显著性. 一.代码 # TTest.py # -*- coding: utf-8 -*- ''' # Created on 2020-05-20 20:36 # TTest.py # @author: huiwenhua ''' ## Import the packages import numpy as np from scipy import stats def get_p_value(arrA

  • Python正则表达式中的量词符号与组问题小结

    正则表达式中的符号 例子 | 是或的关系,只要存在就会被捕获 匹配到的数据只按字符串顺序返回,而不是按照匹配规则返回 In [18]: data = 'insane@loafer.com' In [19]: print(re.findall('insane|com|loafer', data)) ['insane', 'loafer', 'com'] ^ 等同于 \A In [20]: print(re.findall('^insane',data)) ['insane'] In [21]: p

  • python验证多组数据之间有无显著差异

    目录 一.方差分析 1.单因素方差分析 二.卡方检验 一.方差分析 1.单因素方差分析 通过箱线图可以人肉看出10组的订单量看起来差不多,为了更科学比较10组的订单量有无显著差异,我们可以利用方差分析 from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm model = ols('orders~C(label)',data=need_data).fit() anova_table

  • Python使用random.shuffle()随机打乱字典排序

    示例.1 import random from random import shuffle x = [[i] for i in range(10)] shuffle(x) print(x) 运行结果: [[1], [2], [5], [0], [7], [9], [3], [8], [4], [6]][[6], [0], [7], [1], [3], [9], [5], [2], [4], [8]] 示例.2 dicts = { "productCode": "xyd&quo

  • 在Python中利用Into包整洁地进行数据迁移的教程

    动机 我们花费大量的时间将数据从普通的交换格式(比如CSV),迁移到像数组.数据库或者二进制存储等高效的计算格式.更糟糕的是,许多人没有将数据迁移到高效的格式,因为他们不知道怎么(或者不能)为他们的工具管理特定的迁移方法. 你所选择的数据格式很重要,它会强烈地影响程序性能(经验规律表明会有10倍的差距),以及那些轻易使用和理解你数据的人. 当提倡Blaze项目时,我经常说:"Blaze能帮助你查询各种格式的数据."这实际上是假设你能够将数据转换成指定的格式. 进入into项目 into

  • python提取具有某种特定字符串的行数据方法

    今天又帮女朋友处理了一下,她的实验数据,因为python是一年前经常用,最近找工作,用的是c,c++,python的有些东西忘记了,然后就一直催我,说我弄的慢,弄的慢,你自己弄啊,烦不烦啊,逼逼叨叨的,最后还不是我给弄好的?呵呵 好的,数据是这样的,我截个图 我用红括号括起来的,就是我所要提取的数据 其中lossstotal.txt是我要提取的原始数据,考虑两种方法去提取,前期以为所要提取行的数据是有一定规律的,后来发现,并不是,所以,我考虑用正则来提取,经过思考以后,完成了数据的提取,如下午所

随机推荐