如何在我的代码中正确使用random.sample?

时间:2018-03-27 06:02:05

标签: python python-3.x random

我的目录有数百个图像和文本文件(.png和.txt)。关于他们的特别之处在于每个图像都有自己的匹配txt文件,例如im1.png有img1.txt,news_im2.png有news_im2.png等等。我想要的是给它一个参数的一些方法或百分比,让我们说40,它将40%的图像连同其对应的文本随机复制到一个新文件中,这里最重要的一个词就像我再次进行测试一样,我不应该这样做得到相同的结果。理想情况下,我应该能够采取2种参数(提醒第一个将是每个样本的%)第二个是样本数量,例如我可能想要我的数据在3个不同的样本中随机不仅2,在这种情况下它应该能够使目标目录路径等于我想要的样本数量并相应地传播它们,例如我不应该在2个不同的样本中找到img_1。

到目前为止,我所做的只是设置我的方法来复制它们:

import glob, os, shutil


source_dir ='all_the_content/'
dest_dir = 'percentage_only/'
files = glob.iglob(os.path.join(source_dir, "*.png"))
for file in files:
     if os.path.isfile(file):
         shutil.copy2(file, dest_dir)

以及我设置随机切换的代码的开始:

import os, shutil,random

my_pic_dict = {}
source_dir ='/home/michel/ubuntu/EAST/data_0.8/'

for element in os.listdir(source_dir):
    if element.endswith('.png'):
        my_pic_dict[element] = element.replace('.png', '.txt')
print(my_pic_dict)
print (len(my_pic_dict))
imgs_list = my_pic_dict.keys()
print(imgs_list)

我可以最终确定它,因为我无法使random.sample工作。

1 个答案:

答案 0 :(得分:0)

试试这个:

import random
import numpy as np

n_elem = 1000
n_samples = 4
percentages = [50,10,10,30]
indices = list(range(n_elem))
random.shuffle(indices)
elem_per_samples = [int(p*n_elem/100) for p in percentages]
limits = np.cumsum([0]+elem_per_samples)
samples = [indices[limits[i]:limits[i+1]] for i in range(n_samples)]