3

我有一个数组:

[[ 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 的那些对。我已经计算出大于 0.4 的值的数量number_points=len([1 for i in cosine_distance if i >= 0.4])。但无法得到那些对。

4

2 回答 2

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]

这为您提供了一个列表,其中包含满足条件的对的索引。

于 2018-12-24T18:08:15.500 回答
0

诀窍在于pdist输出的描述。

Y : 数组

返回一个压缩距离矩阵 Y。对于每个 和 (其中 ),其中 m 是原始观测值的数量。度量 dist(u=X[i], v=X[j]) 被计算并存储在条目 ij 中。

该文档还引用了squareform以使距离向量再次成为矩阵。输出数组的文档解释是有意义的。文档中的ij位置将是squareform操作创建的矩阵的第一个和第二个索引。然后我们可以得到关于每个点对的每个距离。

distance_matrix = squareform(cosine_distances_array)
points_to_keep = []

for (i in range(len(points)-1)):
    for (j in range(i+1, len(points))):
        if(distance_matrix[i,j] > 0.4):
            points_to_keep.push((points[i], points[j]))

print points_to_keep
于 2018-12-06T16:06:34.653 回答