gpt4 book ai didi

python - 多个 Numpy 随机洗牌不会相加

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

我正在尝试生成一组邻居,每个邻居在一次随机洗牌(行洗牌或列洗牌)中与前一个邻居不同。仅当某一行或列具有超过 K 个 1 时才应生成邻居,如果是这样,则应在该行或列打乱的情况下生成邻居。洗牌应该是附加的,这意味着如果首先对行进行洗牌,然后对列进行洗牌;应生成两个邻居,一个具有打乱的行,另一个具有打乱的行和列。

但是,数组似乎只被打乱了两次,一次用于列循环,一次用于行循环,而且打乱次数并没有累加。

在此示例中,列索引 1 和 2 应进行混洗,行索引 3 和 4 应进行混洗。以下是示例输出,显示生成的邻居:。

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

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

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

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

这是代码:

k=2
tmp = np.array([
[0, 0, 0, 1, 1]
,[0, 0, 1, 0, 0]
,[1, 1, 0, 0, 0]
,[0, 1, 1, 1, 0]
,[1, 1, 1, 0, 1]
])

board = np.copy(tmp)
column = np.sum(board, axis=0)-k
columns = len(column)
row = np.sum(board, axis=1)-k
rows = len(row)
neighbors = []

for i in range(columns):
if column[i] > 0:
np.random.shuffle(board[:,i])
neighbors.append(np.copy(board))

for i in range(rows):
if row[i] > 0:
np.random.shuffle(board[i,:])
neighbors.append(np.copy(board))

print tmp
print column
print row
for i in neighbors:
print i

谢谢

最佳答案

您的代码有效:)

只是有时行或列会被打乱,但仍保持相同的配置。比较:

ar = np.array([0, 1])

for _ in range(10):
print ar
np.random.shuffle(ar)

此外,行或列的元素确实被打乱的情况也并非不可能,但无论如何,您最终都会在完全相同的位置得到 1 和 0(因为唯一排列的数量有限)。

关于python - 多个 Numpy 随机洗牌不会相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26298762/

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