gpt4 book ai didi

python - 获取 2D numpy ndarray 或 numpy 矩阵中前 N 个值的索引

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:40 25 4
gpt4 key购买 nike

我有一个 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(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 个成对距离的向量来自向量数组?

最佳答案

我先弄清楚,argsort,然后再弄清楚。我并不是说这是最好的方法,只是这是我想到的第一种方法,我可能会在有人发布更明显的内容后羞愧地删除它。 :-)

就是说(任意选择前 2 个值):

In [73]: dists = sklearn.metrics.pairwise_distances(data)

In [74]: dists[np.tril_indices_from(dists, -1)] = 0

In [75]: dists
Out[75]:
array([[ 0. , 9.69535971, 3.74165739],
[ 0. , 0. , 10.48808848],
[ 0. , 0. , 0. ]])

In [76]: ii = np.unravel_index(np.argsort(dists.ravel())[-2:], dists.shape)

In [77]: ii
Out[77]: (array([0, 1]), array([1, 2]))

In [78]: dists[ii]
Out[78]: array([ 9.69535971, 10.48808848])

关于python - 获取 2D numpy ndarray 或 numpy 矩阵中前 N 个值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com