1
我正在使用scikit-learn中的kdtree和一個非常大的數據集。在Python中,需要一種有效的方法將kdtree索引映射到值
我可以讓kdtree在合理的時間內(在我的機器上20分鐘)完成查詢,但我無法將索引映射到它們在任何時間不到1小時內表示的值(我在1小時)。
我加載了2個csv文件(train.csv有29M條記錄,test.csv有8M條記錄)。我對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返回的索引映射到place_ids。
感謝您的建議。就結果而言,我試圖根據place_ids得到答案。 kdtree.query返回索引列表。我的問題是將索引映射回該索引的pandas數據框列值。 KDTree正在返回列表清單:[[1,2,3,...],[5,6,7,8,...],...]。我想將其轉換爲字符串列表。 [['place123','place256',...],['place115','place2445',..],..]。在我的例子中,每個元素列表中有30個元素,列表中總共有8M個元素列表。 –
我明白了。你可以試試'ix'而不是'iloc'。雖然'iloc'和'loc'明確直觀,'ix'通常比'iloc'快。 –
感謝您的提示。我會測試一下。 :-) –