Я пытаюсь написать эффективный код для работы с огромными списками.Я сравниваю несколько списков, связанных с местами.
Теоретические списки:
Tx, Ty, Px, Py, Pz (Tx, Ty - местоположения, а Px, Py, Pz - значения связанных параметровс этими местоположениями)
Реальные списки:
Rx,Ry,px,py,pz
len (Tx) = 215 000 и len (Rx) = 68 000 000
Первое, что я делаю, это нарезаю Реальные списки теоретическими maxTx
, maxTy
, minTx
и minTy
:
r=[index for index, value in enumerate(Rx) if value<=maxTx and value>=minTx]
for p in range (len(r)):
rx.append(Rx[r[p]]) (same for Ry,px,py, pz)
Затем я делаюто же самое для координат y, поэтому я делю квадрат вокруг теоретических местоположений, готовых для сравнения, и теперь len (Rx) = 6 500 000
Теперь я хочу, чтобы каждый индекс реальных местоположений отвечал определенному условию:
for i in range (len(set(Tx))):
l=[index for index,value in enumerate(set(Rx)) if value<=Tx[i]+d and value>=Tx[i]-d]
for j in range (len(l)):
rrx.append(Rx[l[j]]) (same for Ry,px,py,pz)
По-видимому, это работает, как и ожидалось, но требуется много времени для проверки каждые 215 000 значений Tx с 6 500 000 значений Rx.Мне нужен индекс значений Rx, относящихся к моему состоянию, поэтому я только сохраняю его.
Затем я проверяю его по y местоположениям с более короткими списками ..
Мое последнее условие:
for n in range (len(Rrrx)):
if sqrt((Tx[i]-Rx[n])**2+(Ty[i]-Ry[n])**2)<=d:
Sx.append(Rx[n])
Sy.append(Ry[n])
Dif.append(sqrt((Tx[i]-Rx[n])**2+(Ty[i]-Ry[n])**2)
Во-первых, я только что проверил это условие, но было явно слишком долго проверять каждые 215 000 значений с 68 000 000 значений, поэтому я попытался сократить реальные списки до минимума, прежде чем проводить сравнение.
Надеюсь, это понятно, знаете ли вы другой способ сделать это быстрее?Спасибо за вашу помощь