我有一个相当大的矩阵M
。我正在尝试找出最接近的前5个距离以及它们的索引。
M = csr_matrix(M)
dst = pairwise_distances(M,Y=None,metric='euclidean')
< p > dst
变成了一个巨大的矩阵,我正在尝试高效地对其进行排序或使用scipy或sklearn找到最接近的5个距离。
这是我想做的事情的示例:
X = np.array([[2, 3, 5], [2, 3, 6], [2, 3, 8], [2, 3, 3], [2, 3, 4]])
我将计算
dst
如下:
[[ 0. 1. 3. 2. 1.]
[ 1. 0. 2. 3. 2.]
[ 3. 2. 0. 5. 4.]
[ 2. 3. 5. 0. 1.]
[ 1. 2. 4. 1. 0.]]
因此,第0行到自身的距离为0.
,第0行到第1行的距离为1.
,... 第2行到第3行的距离为5.
,以此类推。我想找出这些最近的5个距离,并将它们与相应的行放入列表中,例如[距离,行,行]。我不想要任何对角线元素或重复元素,因此我取上三角矩阵如下:
[[ inf 1. 3. 2. 1.]
[ nan inf 2. 3. 2.]
[ nan nan inf 5. 4.]
[ nan nan nan inf 1.]
[ nan nan nan nan inf]]
现在,距离从小到大的前五名是:
[1, 0, 1], [1, 0, 4], [1, 3, 4], [2, 1, 2], [2, 0, 3], [2, 1, 4]
如您所见,有三个距离为
2
的元素和三个距离为1
的元素。我想从中随机选择一个距离为2
的元素作为保留项,因为我只需要前f个元素,其中f=5。这只是一个示例,因为这个矩阵可能非常大。除了使用基本排序函数,还有没有更有效的方法来完成上述操作?我找不到任何可以帮助我完成此操作的sklearn或scipy。