Я сохраняю некоторые x-y coordinates
и по отдельности в r-дереве, перебирая все строки кадра данных pandas и сохраняя столбцы x и y.Чтобы вставить точки, я делаю, как предложено idx.insert(0, (left, bottom, right, top))
, а left == right && top == bottom
.Объединенные координаты образуют несколько графиков.
Теперь я пытаюсь выяснить, находится ли случайная точка xStart, yStart
в r-дереве, используя startInData=list(idx.intersection((xStart, yStart, xStart, yStart)))
.Если startInData
равно empty
, я должен быть уверен, что точка не содержится в r-дереве, верно?Однако, похоже, что функция не работает так.Я проверил это вручную, так как был удивлен, что точка никогда не была найдена в дереве, и обнаружил, что многие точки на самом деле являются частью моего Pandas Dataframe
, но не распознаются с помощью list(idx.intersection((xStart, yStart, xStart, yStart)))
.
Как это может быть?
Это мой код:
import pandas as pd
from rtree import index
df = pd.DataFrame({'id':[1,1,1,1,2,2,2,2], 'x':[1,1,2,2,9,10,10,11],'y':[0,1,1,2,7,7,8,8]})
#my dataframe is actually much bigger but for demonstration i give you this
idx = index.Index()
for i, row in df.iterrows():
idx.insert(i, (row["x"], row["y"], row["x"],row["y"]))
xStart = randint(0,39)
yStart = randint(0,39)
startingPoint= xStart,yStart
startInData= list(idx.intersection((xStart, yStart, xStart, yStart)))
if not startInData:
neighboursStart=list(idx.nearest((xStart, yStart, xStart, yStart), 4))
print("Starting point not in Data")
else:
neighboursStart=startInData
print("Starting point in Data")
В случае, если Начальная точка находится в Дереве, я хочу установить ее в качестве начальной точки,в противном случае я считаю "neighbors"
с помощью neighboursStart=list(idx.nearest((xStart, yStart, xStart, yStart), 4))
.Как-то не получается так, как я хочу, чтобы это работало.Есть идеи?
ОБНОВЛЕНИЕ:
Похоже, проблема не в том, что intersection
работает не так, как он думал, а в том, что мое количество очков слишком велико для структуры r-tree
.Это не сохраняет все мои очки, но останавливается на индексе 100-160?Есть ли способ продлить номер индекса или что-то еще?Мне интересно, что он достигает только около 100. Это нормально?Он работает с меньшим Dataframes
, но с большими он не добавляет все очки.