【发布时间】:2021-11-15 03:12:56
【问题描述】:
我有一个细长的数据矩阵(大小:250,000 x 10),我将其表示为X。我还有一个向量p 来测量我的数据点的质量。我的目标是为我的数据矩阵X 中的每一行x 计算以下函数:
r(x) = min{ ||x-y|| | p[y]>p[x], y 在 X }
在较小的数据集上,我会使用 sklearn.metrics.pairwise_distances 来预先计算距离,如下所示:
from sklearn import metrics
n = len(X);
D_full = metrics.pairwise_distances(X);
r = np.zeros((n,1));
for i in range(n):
r[i] = (D_full[i,p>p[i]]).min();
但是,上述方法会占用大量内存,因为我需要存储 D_full:一个完整的 n x n 矩阵。似乎sklearn.metrics.pairwise_distances_chunked 可能是解决此类问题的好工具,因为距离矩阵一次只存储一个块。我希望在如何使用它方面获得一些帮助,因为我目前不熟悉生成器对象。假设我调用以下代码:
from sklearn import metrics
D = metrics.pairwise_distances_chunked(X);
D_chunk = next(D)
上面的代码产生D(一个生成器对象)和D_chunk(一个536 x n 数组)。 D_chunk是否对应于我之前方法中矩阵D_full 的前536行?如果是,next(D_chunk) 是否对应接下来的 536 行?
非常感谢您的帮助。
【问题讨论】:
标签: python scikit-learn distance nearest-neighbor