NumPy随机选择元组

35

我在创建一个由元组组成的随机选择数组时遇到了困难。

我遇到了错误:a必须是一维的

这是一个示例:

choices = ((0,0,0),(255,255,255))
numpy.random.choice(choices,4)

还有其他方法可以做到这一点吗?

预期结果:

从choices元组中随机选择4个元素组成的numpy数组。

((0,0,0),(0,0,0),(255,255,255),(255,255,255))

你的问题不清楚,请提供更多的代码。 - sshashank124
@sshashank124 添加了预期结果。 - Bartlomiej Lewandowski
3个回答

40

使用choice选择数组中的一维索引,然后对其进行索引。

在您提供的示例中,只有可能选择的数量影响选择的性质,而不是实际值(0、255)。选择索引是一维问题,choice知道如何处理。

choices = numpy.array([[0,0,0],[255,255,255]])
idx = numpy.random.choice(len(choices),4)
choices[idx]

2
我在考虑这个解决方案,可惜它涉及创建一个用于索引的临时数组。 - Bartlomiej Lewandowski
@BartlomiejLewandowski 实际上有两个临时数组:arange 和 idx。 - shx2
1
由于元组索引从0开始,因此arange是不必要的,使用choice(len(choices),4)即可。 - Bartlomiej Lewandowski

6

我只是补充一个没有使用numpy的答案:

choices = ((0,0,0),(255,255,255))

from random import choice

print tuple(choice(choices) for _ in range(4))

1
这样做不能让你有无替换的选择。 - Calvin Ku

2
如果你想进行无重复采样,可以尝试以下方法:

如果你想进行无重复采样,可以尝试:

,请注意保留原有html标签。
import random
choices = ((0,0,0),(1,1,1),(2,2,2),(3,3,3))
random.sample(choices, 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接