合并两个数组而不重复

时间:2019-03-26 13:08:15

标签: python python-3.x numpy

我的目标是在棋盘上找到可以放置国王像的地方。我可以放最大一排和/或一排的两个塔。我不能将国王排成一排或一排,出现任何塔楼。 输入是一个矩阵nxn,其值为“ 1”(放置塔的位置)。输出:我可以放置国王的坐标。带有塔的矩阵不会自动生成。

非常重要:我无法使用任何循环

我的问题是:如何将两个数组组合在一起以形成这样的对: in:[2,3,4]和[1,3,4],其中第一个数组是行,第二个是列 out:[2,1],[2,3],[2,4],[3,1],[3,3],[3,4],[4,1],[4,3], [4,4]

import numpy as np
a = np.matrix([[1, 0, 0, 0, 0], [0, 0, 1, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0]])
print(a)
print('*for 0*')
y = np.argwhere(a == 0)
z = np.argwhere(a == 1)
rowsy = np.unique(np.array(y[:,0]))
print('rows where 0 appears')
print(rowsy)
colsy = np.unique(np.array(y[:,1]))
print('columns where 0 appears')
print(colsy)
print('*for 1*')
rowsz = np.unique(np.array(z[:,0]))
print('rows where 1 appears')
print(rowsz)
colsz = np.unique(np.array(z[:,1]))
print('columns where 1 appears')
print(colsz)
print('**')
print('diff between rows:')
r0 = np.setdiff1d(rowsy, rowsz)
print(r0)
print('diff between columns:')
r1 = np.setdiff1d(colsy, colsz)
print(r1)
print("**")

缩短版本

import numpy as np
a = np.matrix([[1, 0, 0, 0, 0], [0, 0, 1, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0]])
y = np.argwhere(a == 0)
z = np.argwhere(a == 1)
rowsy = np.unique(np.array(y[:,0]))
colsy = np.unique(np.array(y[:,1]))
rowsz = np.unique(np.array(z[:,0]))
colsz = np.unique(np.array(z[:,1]))
r0 = np.setdiff1d(rowsy, rowsz)
r1 = np.setdiff1d(colsy,colsz)

我知道这是非常通用的解决方案,但要完成此操作,我只需要合并最后的数组r0和r1

1 个答案:

答案 0 :(得分:1)

from itertools import product
list(product([2,3,4], [1,3,4]))