【发布时间】:2020-05-01 12:42:08
【问题描述】:
我有用于计算任何给定集合的组合或排列数量的代码。
(math.comb(n,k)) 和 (math.perm(n,k)) 所以 perm = (math.perm(10,5)), perm == 30240 个排列
我想生成 n 和 k 的随机排列和组合,
所以如果 n = 10,k = 5,我会得到类似 3,7,1,2,9 作为烫发或梳子
我会为此使用什么数学函数?
编辑:
代码应该从 10 个随机选择中生成一个 k 值数组,并且对于组合删除每个值 (k),因为它是从主集 (n) 中选择的,因此没有 (n) 的重复。数学的分支是组合学(如果有帮助的话)
我确信必须有一个已经创建的函数。
我有数百万个数组要生成和处理。
【问题讨论】:
-
30240 个排列并不算多,所以你可以创建一个列表,然后
random.shuffle他们。这样,您将获得所有可能排列的随机顺序。或者,如果您只需要其中几个,那么random.sample。 -
如果您还不熟悉,请查看排名和未排名。这是一种将随机索引转换为相应的n-choose-k选择的方法。我不熟悉 numpy 或 scipy 实现。
-
到目前为止您尝试过什么?您是否一直在寻找 30000 顺序的排列?你有 2000 个元素的集合吗?
-
请注意,默认的 Python PRNG 是 Mersenne Twister,周期为 2**19937-1。这不足以从大于 2080 个元素的集合的排列中随机抽取/洗牌。
标签: python python-3.x math combinations permutation