如何在Python中实现此相似性度量?

时间:2016-06-13 16:11:52

标签: python numpy math

我尝试在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的矢量。

编辑:忘了补充说我忽略了min(A,B)< 0因为我的意图不会发生

enter image description here

1 个答案:

答案 0 :(得分: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