如何找到大于某个余弦距离值的值对?

时间:2018-12-06 15:29:20

标签: python cosine-similarity pdist

我有一个数组:

[[ 0.32730174 -0.1436172  -0.3355202  -0.2982458 ]
 [ 0.50490916 -0.33826587  0.4315952   0.4850834 ]
 [-0.18594801 -0.06028342 -0.24817085 -0.41029227]
 [-0.22551994  0.47151482 -0.39798814 -0.14978702]
 [-0.3315491   0.05832376 -0.29526958  0.3786153 ]]

我已经用“ pdist” cosine_distance=1-pdist(array, metric='cosine')计算了它的余弦距离,并得到了距离数组:

[-0.14822659  0.51635946  0.09485546 -0.38855427 -0.82434624 -0.86407176
 -0.25101774  0.49793639 -0.07881047  0.41272145]

现在,我只想获取余弦距离大于0.4且小于0.49的那些对。我用number_points=len([1 for i in cosine_distance if i >= 0.4])得出了大于0.4的值。但无法获得这些对。

2 个答案:

答案 0 :(得分:0)

诀窍在于pdist的输出说明中。

  

Y:ndarray

     

返回一个精简的距离矩阵Y。   和(其中),其中m是原始观测值的数量。计算指标dist(u = X [i],v = X [j])并将其存储在条目ij中。

文档中还引用了squareform,以使距离矢量再次成为矩阵。这样,输出数组的文档说明就有意义了。文档中的Eu sei que era ele! Pode ser, mas ele não tem sido visto por aqui.</i> Preciso ser honesto, as coisas não parecem boas.</i> Às vezes esses casos se arrastam por meses ou anos.</i> 位置将是ij操作创建的矩阵的第一个索引和第二个索引。然后,我们可以获得每个点对的每个距离。

squareform

答案 1 :(得分:0)

为什么不

number_points=len([1 for i in cosine_distance if i >= 0.4 and i <= 0.49])

如果您需要跟踪范围内的对,请使用enumerate

number_points = [idx for idx, i in enumerate(cosine_distance) if i >= 0.4 and i <= 0.49]

这会给您列出满足条件的索引对。