Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 采样问题:如何在采样迭代中从另一个采样中删除一个采样,使其仅被选中一次_Python_Sampling - Fatal编程技术网

Python 采样问题:如何在采样迭代中从另一个采样中删除一个采样,使其仅被选中一次

Python 采样问题:如何在采样迭代中从另一个采样中删除一个采样,使其仅被选中一次,python,sampling,Python,Sampling,我有两本字典: providers_lists = {'PCP1': ['member2', 'member26', 'member6', 'member9'], 'PCP2': ['member10', 'member18', 'member2', 'member26', 'member7'], 'PCP4': ['member10','member13','member25', 'member27', 'member5','member7','member9'], 'PCP5':

我有两本字典:

providers_lists = 
 {'PCP1': ['member2', 'member26', 'member6', 'member9'],
 'PCP2': ['member10', 'member18', 'member2', 'member26', 'member7'],
 'PCP4': ['member10','member13','member25', 'member27', 'member5','member7','member9'],
 'PCP5': ['member13', 'member25', 'member5', 'member6', 'member9'],
 'PCP6': ['member18', 'member27', 'member5']}

 providers = Counter({'PCP1': 2, 'PCP2': 1, 'PCP4': 2, 'PCP5': 1, 'PCP6': 2})
我想从
providers\u列表
中的每个提供商的潜在成员列表中随机抽样每个提供商(“PCP”)的开放插槽数,如
provider\u counts
中所示。而那些被抽样的人则赢得了该供应商的青睐

问题是,“成员”可能会在迭代中出现多次,因为他们有多个选择,但应该只匹配一次。如果选择一次,则不应再次选择。如何创建此条件?在每次迭代后改变一个对象

到目前为止,我得到的是:

# Randomly sample out a member
new_matched = dict()
for k, v in providers.items():
    new_matches[k] = random.sample(providers_lists[k], v)

new_matches = 
{'PCP1': ['member26', 'member2'],
 'PCP2': ['member10'],
 'PCP4': ['member9', 'member27'],
 'PCP5': ['member25'],
 'PCP6': ['member27', 'member18']}

很明显,每次运行时,结果都会有所不同,但正如您所看到的,例如,“member27”出现了两次,但我希望这样,一旦选择,它们将来自其他样本群中的另一个。谢谢

如果一个样本包含重复的成员,一个简单的方法就是生成一个新样本。在这里,重复的成员应该每7个样本出现一次(PCP4中的成员27与PCP6中的成员27发生冲突),但可能少于每5个样本出现一次。如果您试图修改提供者列表,您可能会更改概率分布(如果您从PCP4中删除成员27,则它是在PCP6中选择的)或陷入死胡同(如果您从PCP4中选择成员27,然后尝试从PCP6中删除它)@SergeBallesta谢谢。您认为您可以提供一个示例代码片段,说明如果它包含重复项,您将如何重新采样?假设您已经有一个函数
Do_make_sample
来生成示例,它可以是
def make_sample(*args,**kwargs):而True:smpl=Do_make_sample(*args,**kwargs);members=set([i代表smpl中的lst.values()代表lst中的i];if len(members)==8:返回smpl
,其中冒号(
)和分号(
)分隔行,分号不应保留。从何处获得8个?没有重复项时的成员总数:
总和(providers.values())