给定一个包含N个元素的集合,我想要选择m个大小为k的随机且不重复的子集。
如果我想生成所有的N个元素中选取k个元素的组合,我可以使用itertools.combination,因此实现我所要求的功能的一种方法是:
问题当然是这段代码首先会生成所有可能的排列,而这可能非常昂贵。
另一种次优的解决方案是每次随机选择一个排列(例如从组合中随机选择),然后进行排序以获得排列,并且如果已经选择则将其丢弃。
有更好的方法来解决这个问题吗?
如果我想生成所有的N个元素中选取k个元素的组合,我可以使用itertools.combination,因此实现我所要求的功能的一种方法是:
import numpy as np
import itertools
n=10
A = np.arange(n)
k=4
m=5
result = np.random.permutation([x for x in itertools.permutations(A,k)])[:m]
print(result)
问题当然是这段代码首先会生成所有可能的排列,而这可能非常昂贵。
另一种次优的解决方案是每次随机选择一个排列(例如从组合中随机选择),然后进行排序以获得排列,并且如果已经选择则将其丢弃。
有更好的方法来解决这个问题吗?
itertools
制作了一个无法想象的长的组合列表,在思考他们正在做什么之前就崩溃了他们的Python核心,并因此来到这里的? - eric