来自大型数据框的欧氏距离和指标

Euclidean distance and indicator from a large dataframe

我有一个很大的Dataframe (189090, 8),我需要计算欧氏距离和相似度。

我的做法:

from scipy.spatial import KDTree
from scipy.spatial.distance import pdist

scaler = MinMaxScaler()
scaled = scaler.fit_transform(ds)

Y = pdist(scaled)

Y_squared = squareform(Y)

X_tree = KDTree(Y_squared)

dist, ind = X_tree.query(Y_squared, k=4)

但是当我 运行 我的笔记本(内核关闭)或我的 pycharm 代码被杀死时。但是如果我减少数据框的形状(例如 5000、8),过程 运行s 正常。

我试图减少数据帧使用的内存,但仍然没有起作用。我知道不运行的代码是这个Y = pdist(scaled)

我怎样才能使这个工作?

根据文档,pdist“return是一个压缩距离矩阵”。这意味着它将尝试计算并 return 一个大约 189090^2/2 = 17877514050 个条目的矩阵,导致您的计算机 运行 内存不足。

如果要计算某些特定数据点之间的距离,请在使用 pdist 之前将其过滤掉。

如果真的要计算整个距离矩阵,最好一次计算一小部分数据点的距离(例如1000),并将结果保存在磁盘中。