numpy.random.shuffle失效,生成的列表顺序不变,异常;原来是list()函数会整理列表的顺序

 

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path

# 数据集主目录
DATA_ROOT = 'D:\BaiduNetdiskDownload\pycv-learning\data\spot_data_cls'
# 训练集验证集划分比例
ratio = 0.8

# 创建path对象
DATA_ROOT_PATH = Path(DATA_ROOT)

上面是我导入的模块,以及预定义的一些参数。 

dict_num2name = {}  # 数据集标签序号to类别名称的转换字典
sep_class_paths = {}  # 获取数据集下的各个类别的图片路径

for i,path in enumerate(DATA_ROOT_PATH.iterdir()):
    dict_num2name[i] = path.name  # {0: 'copper', 1: 'edge', 2: 'normal', 3: 'overlap', 4: 'splash', 5: 'twist'}
    sep_class_paths[path.name] = list(map(lambda x : str(x), path.iterdir()))
    np.random.shuffle(list(sep_class_paths[path.name]))

    print(len(list(sep_class_paths[path.name])))

使用上面的代码,获得的图片文件路径如下,仍然是按文件的名称排序。

然后我发现, 在上面的代码中,我已经用list(map())把map对象转换成列表了,所以在乱序的时候,我就不需要再用list()转一遍了。

于是我把代码改成下面这样:

dict_num2name = {}  # 数据集标签序号to类别名称的转换字典
sep_class_paths = {}  # 获取数据集下的各个类别的图片路径

for i,path in enumerate(DATA_ROOT_PATH.iterdir()):
    dict_num2name[i] = path.name  # {0: 'copper', 1: 'edge', 2: 'normal', 3: 'overlap', 4: 'splash', 5: 'twist'}
    sep_class_paths[path.name] = list(map(lambda x : str(x), path.iterdir()))
    np.random.shuffle(sep_class_paths[path.name])

    print(len(list(sep_class_paths[path.name])))

结果如下,乱序效果很明显。

为什么在shuffle()里用list()会产生无法乱序的效果呢?

我不懂,只是在这里记录一下我对这一异常的解决思路。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值