• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python 实现以相同规律打乱多组数据
    POST TIME:2021-10-18 14:38

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

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

    您可能感兴趣的文章:
    • Python深度学习之使用Pytorch搭建ShuffleNetv2
    • Pytorch在dataloader类中设置shuffle的随机数种子方式
    • Pytorch使用shuffle打乱数据的操作
    上一篇:python用faker库批量生成假数据
    下一篇:python实现selenium网络爬虫的方法小结
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信