Каков наилучший способ осуществить быстрое вычисление расстояния?
Я кодирую бота для Starcraft 2, в котором нужно вычислять много расстояний в каждом кадре.
Вотчасть используемой библиотеки, и я хочу ее улучшить: https://github.com/Dentosal/python-sc2/blob/develop/sc2/position.py
Я записал расчеты для 10-минутной игры, в среднем на каждый кадр приходилось столько вызовов:
distance_to 10
distance_to_point2 965
_distance_squared 1775
closest 42
Обратите внимание, что closest
состоит из цикла for, я проверил, насколько велик n
, и получил этот дистрибутив для игры:
0 < n <= 5 : 21389
5 < n <= 10 : 16426
10 < n <=20 : 28202
20 < n <=605 : 13620
60 < n : 34
len n of 'closest' call: 79671
average n of 'closest' call: 13.815654378632125
min n of 'closest' call: 2
max n of 'closest' call: 128
Моя идея состояла в том, чтобы использовать numpy и для "ближайшего"Функция векторного решения для вычисления всех расстояний одновременно.
Есть еще одна функция, которую я хотел бы реализовать, которая заключается в вычислении ближайших расстояний всех членов одного списка ко всем членам другого списка.
Является ли numpy правильной идеей?Какие функции NumPy я использую?Будет ли лучше Cython?