Создание матрицы смежности быстро для использования в поиске пути для расчета расстояния сетки от происхожденияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание матрицы смежности быстро для использования в поиске пути для расчета расстояния сетки от происхождения

Сообщение Anonymous »

Цель < /h2>
Я работаю над проектом, который требует, чтобы я визуализировал, насколько данный бюджет может достичь на карте с различными ценовыми зонами. < /p>

Пример с 3 ценовыми зонами, водой, сельской местностью и городом, каждая из которых имеет разные расходы на метр: < /p>

Красная точка - это происхождение, зеленая точка - это просто образцовая точка, она не имеет подшипника на результат. Градиент переходит от желтого (дешевого) к фиолетовому (максимальному бюджету)
проблема
Сложность времени в настоящее время очень плохо, что приводит время на время Расти очень быстро, когда я увеличиваю разрешение (уменьшение размера в метрах каждой клетки). Скорее всего, это связано с итеративным созданием scipy.sparse.lil_array при создании графика смежности массива. Мои текущие процессы для достижения этого являются следующими 6 основными шагами (время добавлено, чтобы показать узкие места): < /p>
  • Создайте список Shapely.geometry Python. Point , который представляет все точки в 2D -сетке, которую мы будем выбрать цены из геометрии Geopandas. Список инициализируется с пустыми значениями перед модификациями. Я итеративно устанавливаю каждый индекс (по одному) в точку, созданную в зависимости от размера ячейки сетки. И, наконец, я преобразовываю список Python в DataFrame Pandas, чтобы позже пересечь с регионами геопанд. (13.6s)
  • Я теперь использую DataFrame с точками и конвертируйте его в GeoDataFrame и используйте GPD .sjoin против моих различных ценовых областей для получения в данном случае 3 Geodataframe, каждый из которых содержит только точки, которые пересекались с данной ценовой областью. (0,7S)
  • После отображения каждой точки с их ценой я хочу объединить его в 2D Массив со значением является цена для этого, я использую список 2D Python и индекс и заменяю значения, используя преобразование из координат точек в координаты индекса. (14.9s)
  • Теперь у нас есть 2D -массив, который содержит стоимость/вес для каждой ячейки. Теперь я хочу преобразовать его в график (график смежности матрицы). Для этого я использую итеративные проходы и вводит каждое преимущество в scipy.sparse.lil_array , а затем после подключения каждого элемента преобразовать массив в scipy.sparse.csr_array (136.77 s)
  • Я теперь называю scipy.sparse.csgraph.dijkstra и использовать созданный массив расстояний. (0.4s)
  • из -за фиксированной цены, необходимой для каждого узла, я еще раз итеративно перейти через массив Добавление фиксированной стоимости. (0,2S)
В дополнение к шагу 4 я должен упомянуть, что Я использую более 4 краев на узел. А именно использование 5x5, сосредоточенного на узле (но игнорирование дублирующих кардинальных и диагональных путей), но это вводит немного маржи ошибки, так как можно избежать стоимости ячейки, прыгая по диагонали, но запас ошибки должен быть небольшим Достаточно, чтобы его можно было проигнорировать.
Это связано с иным образом квадратным результатом: < /em> < /p>

Вопрос
это хороший подход к этой проблеме? (Даже если он имеет блочные неестественные края из -за него, используя график с ограниченным количеством ребра для каждого узла)

, если да, то как я могу более эффективно создать свой смежный график (сократить время, проведенное на шаге 4)? < /p>
Что я попробовал < /h2>
  • Я пробовал линии рисования из происхождения в круге и сохранив, как долго может Добавиться до того, как бюджет закончится. Это дало мне плохое время выполнения (вероятно, проблема кодирования), но также не может справиться с поиском более дешевого маршрута, пройдя дальше через более дешевые области. В то время как это сокращение времени создания на многое, оно также увеличило время поиска пути с большим отрывом (необходимого для использования самостоятельной версии Dijkstra на основе Википедии с использованием кучи и раннего выхода с использованием бюджета) В общем времени создания и пути Обнаружение составляет около 2 раза по сравнению с методом матрицы смежности, упомянутым выше.


Подробнее здесь: https://stackoverflow.com/questions/794 ... gird-dista
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»