如何创建随机向量



我对Python完全陌生,事实上,上一次我知道任何编程时,它都是commor-64基础程序(抱歉(。

我正在尝试在PYHON中创建随机向量。矢量是52位,只包含0-12,矢量本身不能重复。我试过这个。。。

from random import randint
vector = [randint(0, 12) for p in range(0, 52)]

但我怀疑(尽管它有点起作用(,我无法判断它是否在任何时候都没有重复完整的52位矢量。我运行了几个小时,它产生了超过4400万次,但与我想要的数字不匹配……我甚至不知道会有多少次许可……我猜是52次!(51 x 50 x 49…等等(所以4400万是(非常大的(海洋中的一滴(我的数学算不上(。

还是我在浪费时间?

谢谢各位

from random import randint
vector = [randint(0, 12) for p in range(0, 52)]

我想在Python中重复创建一个52位的矢量/数字0-12矩阵,而不重复整个矢量(模拟一副牌洗牌(。

您的问题有点难以解析,但由于尝试填充52个标记的值不到52个,您根本想要比现有学位更多的学位!

你可以创建一个集合,为每张牌编制索引,然后洗牌或拿走,而不需要替换!

card_indicies = list(range(52))
random.shuffle(card_indicies)  # in-place single random shuffle

重复采样收集的方法

card_indicies = list(range(52))
random.sample(card_indicies, len(card_indicies))  # take every element

然而,您可以获得您的收藏,将每个收藏打包到set()中并检查其是否存在将防止重复

card_indicies = list(range(52))
results = set()
for index_attempt in range(10000):  # tune to attempts
results.add(
tuple(random.sample(card_indicies, len(card_indicies)))
)

最后,如果你只需要随机和独立的值,你可以用公式化的方法来确定整个集合中的索引,并从中随机选择

def index_select(choices, positions):
choices_total = choices**positions
value = random.randrange(choices_total)
result = []
for _ in range(positions):
index_value = value % choices
result.append(index_value)
value = value // choices
return result
>>> index_select(3, 4)
[2, 0, 0, 2]
>>> index_select(3, 4)
[2, 1, 1, 0]
>>> index_select(12, 52)
[6, 11, 8, 3, 2, 4, 8, 11, 4, 3, 8, 4, 5, 6, 4, 10, 9, 5, 0, 10, 7, 0, 8, 3, 9, 1, 7, 5, 6, 3, 6, 5, 8, 10, 11, 2, 5, 6, 7, 8, 1, 2, 5, 0, 9, 10, 7, 10, 8, 7, 11, 8]

最新更新