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

2024-03-28 12:39:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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]])

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

(涉及两个for循环的所有内容我认为都不优雅)


Tags: 方法numpya2元素内容fora1矩阵
1条回答
网友
1楼 · 发布于 2024-03-28 12:39:15
>>> (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]])

相关问题 更多 >