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