我有一个目录,包含来自三个不同域的数千个图像
假设文件名为xxx_A.png和yyy_B.png和zzz_C.png 每个领域都有成千上万的人
os.listdir()
将返回目录中所有图像名的列表
然后我想根据一些百分比过滤这个列表
示例: 我指定我想要在这数千张图片中,只有100张经过洗牌的图片,其中30%来自domainA,30%来自domainB,40%来自domainC
所以只要给定一个特定的数字,我就有这些百分比,然后我选择x个随机图像(当然是基于图像名称,因为它们已经被指定了),这就是新列表
示例:
输入:
['1_A.png', '2_A.png', '3_A.png', '4_A.png', '5_A.png', '6_A.png', '7_A.png', '8_A.png', '9_A.png', '10_A.png', '1_B.png', '2_B.png', '3_B.png', '4_B.png', '5_B.png', '6_B.png', '7_B.png', '8_B.png', '9_B.png', '10_B.png', '1_C.png', '2_C.png', '3_C.png', '4_C.png', '5_C.png', '6_C.png', '7_C.png', '8_C.png', '9_C.png', '10_C.png']
我要12个图像,30%来自域A,30%来自域B,40%来自域C
输出:
^{pr2}$我怎么做这个?在
以下是一种可能的方法:
首先根据字母使用^{} 将所有文件名拆分为域。e、 像字典一样:
对于每个域,使用^{} 从域中随机抽取所需数量的文件到输出列表中。^{} 用于通过始终向上舍入来确保始终存在足够的文件。
最后,洗牌组合输出列表(如果需要),并确保文件总数正确。
这将产生一个输出,其中包含来自每个域的随机元素的精确分布。在
^{pr2}$给出可能的输出:
在python3.6.6上测试
下面是我定义的一个函数。正如马丁所说,数学.ceil可能是用于获取文件数量的最佳函数(这样您就不会得到少于所需数量的文件)。另外,您将希望在没有替换的情况下进行采样(这意味着您不希望重复文件名),因此不应使用随机选择就像Rakesh做的那样随机选择更换样品)。这个随机洗牌避免了这个问题。在
输入:
输出:
^{pr2}$您还可以在return语句之前调用
random.shuffle(shuffled_list)
来洗牌输出列表。在这是一种方法。我用一个字典从不同的域分离图像,然后计算每个域所需的图像数。在
演示:
输出:
^{pr2}$相关问题 更多 >
编程相关推荐