У меня есть решение, в котором я просматриваю каждую точку карты и каждый объект, вычисляю расстояние до них всех, а затем покидаю только минимальное расстояние.
Проблема здесь в том, что если я просыпаюсь с реальными данными, карта может легко содержать десятки миллионов точек, а объектов может быть более 100.
Есть ли лучший код реализацию для решения этой проблемы?
Загрузка пакетов
Код: Выделить всё
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Код: Выделить всё
coord_dict = {"X": [],
"Y": []}
for x_value in range(0, 10000, 50):
for y_value in range(0, 5000, 50):
coord_dict["X"].append(x_value)
coord_dict["Y"].append(y_value)
map_df = pd.DataFrame(coord_dict)
Код: Выделить всё
well_points_dict = {"X": [500, 1500, 4000, 5500, 6250, 7500, 8000, 9000],
"Y": [500, 4000, 2000, 1500, 500, 5000, 100, 2500]}
wells_df = pd.DataFrame(well_points_dict)
Код: Выделить всё
calculations_count = 0
distance_map = np.zeros(map_df.shape)
for i in range(map_df.shape[0]):
d = []
for j in range(wells_df.shape[0]):
d.append(((map_df["X"].iloc[i]-wells_df["X"][j])**2 + (map_df["Y"].iloc[i]- wells_df["Y"][j])**2)**0.5)
calculations_count += 1
dd = min(d)
distance_map[i,1] = dd
# print(calculations_count)
Код: Выделить всё
plt.figure(figsize=(10,10))
plt.scatter(x=map_df["X"],y=map_df["Y"],c=distance_map[:,1],s=1,cmap='terrain')
for i in range(len(wells_df)):
plt.plot(wells_df["X"][i],wells_df["Y"][i], color='black', marker='o',markersize=3)
plt.title('Calculated map')
plt.xlabel('X')
plt.ylabel('Y')
plt.axis('scaled')
plt.tight_layout()
plt.colorbar(shrink=0.25)
Подробнее здесь: https://stackoverflow.com/questions/786 ... est-object