我尝试在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因为我的意图不会发生
答案 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