我有这样的2个numpy矩阵。
矩阵1
arr1 =
array([[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 1., 0.]])
矩阵2
arr2 =
array([[ 0., 0., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
我想找到这些矩阵的相似性。我认为xor
可用于矩阵。 Xor操作应显示值不同的位置,然后我可以计算值1来计算相似度的百分比。我不知道如何在python中使用xor
。
此代码不起作用:a = arr1 xor arr2
。
答案 0 :(得分:4)
您只需使用arr1 != arr2
即可:
>>> arr1 != arr2
array([[False, False, False],
[False, False, True],
[False, True, False]], dtype=bool)
然后使用.sum()
,因为int(False)
为0
且int(True)
为1
:
>>> (arr1 != arr2).sum()
2
因此有两个指数arr1[i,j]
不等于arr2[i,j]
。
如果要计算相似度(此处定义为相同元素的数量),您可以使用:
>>> (arr1 == arr2).sum()/arr1.size
0.77777777777777779
所以77.77%的元素是相同的。
答案 1 :(得分:1)
还有内置函数bitwise_xor
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.bitwise_xor.html
答案 2 :(得分:1)
A XOR B表示:
(A而不是B)或(B而不是A):
$1
...至少对于布尔数组。
答案 3 :(得分:0)
如果您有二进制 ndarray,那么您也可以使用 logical_xor()
:
np.logical_xor(arr1, arr2).sum()
# 2