如何使用Python比较两个矩阵的相似性?

2024-04-23 08:39:16 发布

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

Python 3: 如何比较两个形状相似的矩阵

例如,假设我们有矩阵x:

1 0 1
0 0 1 
1 1 0

我想将其与矩阵y进行比较:

1 0 1
0 0 1
1 1 1

这将给我一个分数,例如,8/9,因为8/9的项目是相同的,除了最后一个数字从0到1。我正在处理的矩阵要大得多,但它们的维数是一致的,便于比较

一定有某种图书馆可以做到这一点。有什么想法吗


Tags: 项目图书馆矩阵数字分数形状维数
3条回答

如果您使用的是numpy,那么在进行如下比较之后,只需在布尔数组上使用np.mean()

import numpy as np

m1 = np.array([
    [1, 0, 1],
    [0, 0, 1], 
    [1, 1, 0],
])

m2 = np.array([
    [1, 0, 1],
    [0, 0, 1],
    [1, 1, 1],
])

score = np.mean(m1 == m2)
print(score) # prints 0.888..

如果您的矩阵是使用第三方库Numpy表示的(该库提供了许多其他有用的东西,用于处理矩阵,以及任何类型的矩形多维数组):

>>> import numpy as np
>>> x = np.array([[1,0,1],[0,0,1],[1,1,0]])
>>> y = np.array([[1,0,1],[0,0,1],[1,1,1]])

然后,找到相应相等元素的数量非常简单,如下所示:

>>> (x == y).sum() / x.size
0.8888888888888888

这是因为x == y“广播”每个对应元素对的比较:

>>> x == y
array([[ True,  True,  True],
       [ True,  True,  True],
       [ True,  True, False]])

然后我们将布尔值相加(转换为整数,True的值为1,False的值为0),然后除以元素总数

使用numpy阵列可以轻松地完成此操作

import numpy as np

a = np.array([
    [1, 0, 1],
    [0, 0, 1], 
    [1, 1, 0],
])

b = np.array([
    [1, 0, 1],
    [0, 0, 1],
    [1, 1, 1],
])

print(np.sum(a == b) / a.size)

返回0.889

相关问题 更多 >