python - 我如何在 Python 中实现这种相似性度量?

标签 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

最佳答案

这应该有效。首先,我们通过堆叠列创建一个矩阵 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/

相关文章:

python - 在 numpy 数组中查找最常见的子数组

arrays - 如何将整数分解为 2 的幂数组?

c++ - C/C++ 中大型非稀疏非方矩阵的多线程乘法

algorithm - 计算递推关系 T(n)=T(n/[(log n)^2]) + θ(1)

python - 有没有办法通过 Pandas 中两列的逻辑比较进行分组?

python - 渲染灰色纹理而不是颜色

python - 稀疏旋转矩阵 Python SciPy

python - 将 numpy 数组保存到不带括号和空格的文件中

python - 将包添加到 PyPi 时发生 SSL 错误

python - 如何同时支持 argparse 和 optparse?