我有一个RIR_list
格式的文件名列表number/filename
。例如3/foo
。在这种情况下,数字是1-30之间的整数(不失一般性)
我想从上一个列表中选择一个n对的子列表。n对中的每一对在两个条目的开头都应该有相同的数字。有效代码为(如果我没有遗漏任何内容):
#choose a random beginning for each pair
room_nb = np.random.randint(30,size=n)+1
#iterate through pairs
for i in range(n):
#generate sublist containing only entries with the correct beginning for this iteration
room_RIR = [rir for rir in RIR_list if rir.startswith(str(room_nb[i])+'/')]
#pick a random pair with the same header for this iteration
chosen_RIR = random.choices(room_RIR, k=2)
如果我只想随机化n个条目,我可以用一行random.choices(RIR_list, k=n)
对两个条目做两次。有没有一种更优雅的方法来做傻事?更重要的是,也许更低的计算
附言。 不允许具有相同文件名的对,每个数字恰好包含相同数量的文件,但如果不同,则倾向于该数字的均匀分布,即如果它包含两个文件,则每个数字的概率为0.5
与每次创建文件对时都查找具有相同前缀的文件不同,您可以按前缀对文件进行一次分组并将其存储在字典中。这样,您就可以从该dict中随机选择一个条目,然后从该组中随机选择一个样本
但是,这意味着,无论有多少个文件以该数字开头,每个数字都有相同的概率。如果希望概率反映文件的数量,可以随机选择一个文件,获取前缀,然后从相应的组中获取一对
(这里用
random.sample
表示不同部分的成对;如果要允许相同元素对,请使用random.choices
。)相关问题 更多 >
编程相关推荐