多个Numpy随机shuffle不会加起来

时间:2014-10-10 11:50:54

标签: python numpy

我试图生成一个邻居数组,每个邻居在一个随机shuffle中与前一个邻居不同,可以是行或列shuffle。仅当某个行或列具有多于K 1的时间时才应生成邻居,如果是,则应生成具有该行或列混洗的邻居。 shuffle应该是加法的,这意味着如果先将一行洗牌,然后是一列;应该生成两个邻居,一个带有洗牌行,另一个带有洗牌的行和列。

然而,似乎数组只被洗牌两次,一次用于列循环,一次用于行循环,而洗牌不会加起来。

在此示例中,列索引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

由于

1 个答案:

答案 0 :(得分:1)

您的代码有效:)

只是有时行或列被洗牌但保持相同的配置。与:比较:

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

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

此外,行或列的元素确实被洗牌的可能性并不大,但无论如何,你最终都会在完全相同的位置得到1和0(因为那里有's' s只有有限数量的独特排列。)