1
我试图生成一个邻居数组,每个邻居在一个随机洗牌中不同于前一个邻居,无论是行或列洗牌。只有在特定的行或列的K 1多于一个的情况下才会生成邻居,如果是,则应该生成一个邻居,并将该行或列进行混洗。洗牌应该是叠加的,这意味着如果第一行被洗牌,然后是一列;应该生成两个邻居,一个具有混洗行,另一个具有混洗行和列的两个邻居。多个Numpy随机洗牌不加起来
但是,似乎该数组只是洗牌两次,一个用于列循环,另一个用于行循环,而混洗不加起来。
在这个例子中,列索引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
感谢