我有一组N维向量.
data = np.array([[5,6,1],[2,0,8],[4,9,3]])
In [1]: data
Out[1]:
array([[5, 6, 1],
[2, 0, 8],
[4, 9, 3]])
我正在使用sklearn的pairwise_distances function来计算距离值矩阵.注意,该矩阵关于对角线是对称的.
dists = pairwise_distances(数据)
In [2]: dists
Out[2]:
array([[ 0. , 9.69535971, 3.74165739],
[ 9.69535971, 0. , 10.48808848],
[ 3.74165739, 10.48808848, 0. ]])
我需要与此矩阵中的前N个值对应的索引,因为这些索引将对应于表示它们之间距离最大的向量的数据中的成对索引.
我试过做np.argmax(np.max(距离,轴= 1))得到每一行中最大值的索引,并尝试np.argmax(np.max(距离,轴= 0))得到每列中最大值的索引,但请注意:
In [3]: np.argmax(np.max(dists, axis=1))
Out[3]: 1
In [4]: np.argmax(np.max(dists, axis=0))
Out[4]: 1
和:
In [5]: dists[1, 1]
Out[5]: 0.0
因为矩阵关于对角线是对称的,并且因为argmax返回它找到的具有最大值的第一个索引,所以我最终得到行中的对角线中的单元格与存储最大值的列匹配,而不是行和顶部值的列本身.
在这一点上,我确信我可以编写更多代码来找到我正在寻找的值,但肯定有一种更简单的方法来做我想做的事情.所以我有两个或多或少等同的问题:
如何在矩阵中找到与前N个值对应的索引,或者,如何从向量数组中找到具有前N个成对距离的向量?