gpt4 book ai didi

python - 具有生成具有唯一行的二维数组的概率的 Numpy 随机选择

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:44 28 4
gpt4 key购买 nike

类似于Numpy random choice to produce a 2D-array with all unique values ,我正在寻找一种有效的生成方式:

n = 1000
k = 10
number_of_combinations = 1000000

p = np.random.rand(n)
p /= np.sum(p)

my_combinations = np.random.choice(n, size=(number_of_combinations, k), replace=False, p=p)

正如在上一个问题中所讨论的,我希望这个矩阵只有唯一的行。不幸的是,provided solutions不适用于使用特定概率 p 的额外扩展。

我目前的解决方案如下:

my_combinations = set()

while len(my_combinations) < number_of_combinations:
new_combination = np.random.choice(n, size=k, replace=False, p=p)
my_combinations.add(frozenset(new_combination))

print(my_combinations)

但是,我确实认为应该有一种更有效的 numpy 方法来更快地解决这个问题。

最佳答案

对于这些参数值,遇到重复行的概率小得像天文数字(除非p非常倾斜,可能到了float精度无法容纳的程度)。我只会用

my_combinations = np.random.choice(n, size=number_of_combinations, k), replace=True, p=p)

您可以在 O(N log N) 中检查重复项,其中 N = number_of_combinations;

保守地说,你可以生成

my_combinations = np.random.choice(n, size=2 * number_of_combinations, k), replace=True, p=p)

然后 drop duplicates并取前 number_of_combinations 行。

关于python - 具有生成具有唯一行的二维数组的概率的 Numpy 随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408148/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com