簡體   English   中英

如何使用 Python 比較兩個矩陣的相似性?

[英]How can I compare two matrixes for similarity using 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。我正在處理的矩陣要大得多,但它們的尺寸一致,便於比較。

必須有某種圖書館可以做到這一點。 有什么想法嗎?

您可以使用 numpy arrays 輕松完成此操作。

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。

如果您的矩陣使用第三方庫 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]])

然后我們將 boolean 值相加(轉換為 integer, True的值為 1, False的值為 0)並除以元素的總數。

如果您使用的是 NumPy,您可以比較它們並獲得以下 output:

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(a == b)
Out: matrix([[ True,  True,  True],
             [ True, True,  True],
             [ True,  True,  False]],

要計算匹配項,您可以將矩陣重塑為list並計算匹配值:

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]])

res = list(np.array(a==b).reshape(-1,))
print(f'{res.count(True)}/{len(res)}')

Out: 8/9

如果您使用的是 numpy,您可以在比較后簡單地在 boolean 數組上使用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..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM