我有两个numpy数组(2维),例如
a1 = array([["a","b"],["a","c"],["b","b"],["a","b"]])
a2 = array([["a","b"],["b","b"],["c","a"],["a","c"]])
获得这样的矩阵最优雅的方法是什么:
array([[1,0,0,0],
[0,0,0,1],
[0,1,0,0],
[1,0,0,0]])
如果所有(a1 [i,:] == a2 [j,:]),则元素(i,j)为1,否则为0
(一切涉及两个for循环我不认为优雅)
答案 0 :(得分:10)
>>> (a1[:,numpy.newaxis] == a2).all(axis=2)
array([[ True, False, False, False],
[False, False, False, True],
[False, True, False, False],
[ True, False, False, False]], dtype=bool)
如果您确实需要整数,请转换为int
作为最后一步:
>>> (a1[:,numpy.newaxis] == a2).all(axis=2).astype(int)
array([[1, 0, 0, 0],
[0, 0, 0, 1],
[0, 1, 0, 0],
[1, 0, 0, 0]])