2016-06-13 61 views
2

我試圖實現圖像中顯示的距離測量,在Python這樣:如何在Python中實現這種相似性度量?

import numpy as np 

A = [1, 2, 3, 4, 5, 6, 7, 8, 1] 
B = [1, 2, 3, 2, 4, 6, 7, 8, 2] 

A = np.asarray(A).flatten() 
B = np.asarray(B).flatten() 

x = np.sum(1 - np.divide((1 + np.minimum(A, B)), (1 + np.maximum(A, B)))) 
print("Distance: {}".format(x)) 

但經過測試,它似乎不正確的方法。如果給定的向量之間沒有相似性,則返回的最大值應該是1,其中0是完全相似的。圖像中的A和B都是大小爲m的矢量。

編輯:忘了補充一點,我忽略了一部分分鐘(A,B)< 0作爲不會發生過對我的意圖

enter image description here

回答

1

這應該工作。首先,我們通過堆積列創建矩陣AB並計算出最小向量AB_min和最大向量AB_max。然後,我們按照您的定義計算D,利用numpy.where來指定兩個條件。之後,我們將這些元素進行求和以得到您定義的D_proposed。本例給出的值爲0.9

import numpy as np 

A = [1, 2, 3, 4, 5, 6, 7, 8, 1] 
B = [1, 2, 3, 2, 4, 6, 7, 8, 2] 

AB = np.column_stack((A,B)) 

AB_min = np.min(AB,1) 
AB_max = np.max(AB,1) 
print AB_min 
print AB_max 

D = np.where(AB_min >= 0.,\ 
     1. - (1. + AB_min)/(1. + AB_max),\ 
     1. - (1. + AB_min + abs(AB_min))/(1. + AB_max + abs(AB_min))) 
print D 

D_proposed = np.sum(D) 
print D_proposed 
+0

我與像一些其他值嘗試: A = [1,1,1,1,1,1,1,1,1] B = [1,1,1,1, 1,1,1,1,0] 它返回的距離爲0.5,較大的值如5 vs 1,它返回6.我的理解是,它將返回0和1之間的值,無論如何。 – Laende

+0

按照你的定義,'D'的值都在0和1之間。可能你必須將'D_proposed'除以它的大小來獲得該行爲。 – Chiel

+0

這似乎有伎倆!謝謝! – Laende