gpt4 book ai didi

Python — 用设定数量的 1 随机填充二维数组

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:28 25 4
gpt4 key购买 nike

假设我有一个由 0 组成的二维数组 (8x8)。我想用预定数量的 1 填充这个数组,但以随机方式。例如,假设我想在网格中随机放置 恰好 16 个 1,结果如下:

[[0, 0, 0, 1, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 1, 0, 0],
[0, 1, 0, 0, 0, 1, 0, 0],
[0, 1, 1, 0, 0, 0, 0, 1]]

1 的结果放置丝毫不重要,只要它是随机的(或 Python 允许的随机数)。

我的代码在技术上是可行的,但我认为它的效率低得可怕。我所做的就是将每个数字变为 1 的概率设置为 n/s,其中 n 是所需的 1 和 s 的数量> 是网格的大小(即元素的数量),然后我检查是否添加了正确数量的 1。这是代码(Python 2.7):

length = 8
numOnes = 16
while True:
board = [[(random.random() < float(numOnes)/(length**2))*1 for x in xrange(length)] for x in xrange(length)]
if sum([subarr.count(1) for subarr in board]) == 16:
break
print board

虽然这个有效,但它似乎是一种迂回的方法。有没有更好(即更有效)的方法来做到这一点?我预计会多次运行此代码(数十万甚至数百万次),因此速度是一个问题。

最佳答案

随机排列 16 个 1 和 48 个 0 的列表:

board = [1]*16 + 48*[0]
random.shuffle(board)
board = [board[i:i+8] for i in xrange(0, 64, 8)]

或者用 0 填充棋盘并随机选择 16 个位置的样本来放入 1:

board = [[0]*8 for i in xrange(8)]
for pos in random.sample(xrange(64), 16):
board[pos//8][pos%8] = 1

关于Python — 用设定数量的 1 随机填充二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811240/

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