[英]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.