如何仅使用 numpy 从距离矩阵中提取数据点?

Posted

技术标签:

【中文标题】如何仅使用 numpy 从距离矩阵中提取数据点?【英文标题】:How to extract data points from the distance matrix using numpy only? 【发布时间】:2021-12-16 02:02:53 【问题描述】:

我有 2 组数据点:

A:mx10

B:nx10

A和B中数据点的距离矩阵D:mxn

如何使用距离矩阵 D 提取 A 的 k 行,其中它们与 B 中数据点的距离最小?矩阵的大小应为 nxk。我不想循环遍历矩阵的每一列和每一行,所以我对只使用矩阵的方法感兴趣。

D = np.distance_matrix(A, B)

【问题讨论】:

【参考方案1】:

假设已经给出了完整的数组 D 并且“到 B 的距离”表示“到 B 中所有元素的所有距离中的最小者>",那么它应该是这样的

d = D.min(axis=1)  # m-long vector of distances from points in A to B
ord = d.argsort()  # an array of indices in d sorted by the corresponding values
kD = d[ord[:k],:]  # take first k elements

如果km 小得多,这不是很有效,因为它对所有元素进行排序,而不是只查找kth。但它应该可以解决问题。

【讨论】:

以上是关于如何仅使用 numpy 从距离矩阵中提取数据点?的主要内容,如果未能解决你的问题,请参考以下文章

NumPy 2d 数组的切片,或者如何从 nxn 数组 (n>m) 中提取 mxm 子矩阵?

API 距离矩阵仅在 Javascript 中调用

如何从多类分类的混淆矩阵中提取假阳性、假阴性

numpy中的矢量化矩阵曼哈顿距离

如何使用 PHP 从距离矩阵中获取集群?

使用numpy选择排除某些索引的数组中最小值的索引