如何使这种相等数组快速(numpy)?

Pet*_*mit 5 python numpy

我有两个numpy数组(2维)例如

a1 = array([["a","b"],["a","c"],["b","b"],["a","b"]])
a2 = array([["a","b"],["b","b"],["c","a"],["a","c"]])
Run Code Online (Sandbox Code Playgroud)

获取像这样的矩阵的最优雅的方法是什么:

array([[1,0,0,0],
       [0,0,0,1],
       [0,1,0,0],
       [1,0,0,0]])
Run Code Online (Sandbox Code Playgroud)

其中,如果所有(a1 [i,:] == a2 [j,:]),则元素(i,j)为1,否则为0

(涉及两个for循环的一切我不认为优雅)

Sve*_*ach 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)
Run Code Online (Sandbox Code Playgroud)

如果你真的需要整数,转换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]])
Run Code Online (Sandbox Code Playgroud)