来自大型数据框的欧氏距离和指标
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),并将结果保存在磁盘中。
我有一个很大的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),并将结果保存在磁盘中。