我尝试在 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 的部分,因为我的意图永远不会发生这种情况
最佳答案
这应该有效。首先,我们通过堆叠列创建一个矩阵 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
关于python - 我如何在 Python 中实现这种相似性度量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794520/