我正在使用scikit-learn的kdtree来处理一个非常大的数据集。
我可以让kdtree在合理的时间内完成查询(在我的机器上20分钟),但我不能在不到1小时的任何时间内将索引Map到它们所表示的值(我在1小时后停止等待)。
我加载了2个csv文件(train.csv有29 M条记录,test.csv有8 M条记录)。我对3个键感兴趣。'x','y'是浮点数,'placeid'是字符串。
from sklearn.neighbors import KDTree
import pandas as pd
train = pd.read_csv("train.csv")
test = pd.read.csv("test.csv")
tree = KDTree(train[['x','y']])
_, indexes = tree.query(test[['x','y']],k=30)
# takes 20 minutes to get here. Here is the code that takes more than an hour
result = [[train.iloc[idx].place_id for idx in idx_set] for idx_set in indexes]
有没有更快的方法呢?我的目标是将所有从KDTree返回的索引Map到place_ids。
1条答案
按热度按时间zd287kbt1#
也许你可以给予一下,因为你不想从
query
的距离:这可能会减少第一部分的计算时间。对于第二部分,我正在考虑flatten或
reshape
索引和sliceplace_id
而不是双循环。你能提供result
的格式吗?它只是一个简单的列表吗?