Есть два варианта в зависимости от ваших координат широты и долготы. Когда координаты Lat, Lon образуют эквидистантную сетку, вы можете использовать эту первую опцию, иначе вы можете использовать вторую опцию ниже.
первый вариант
Я создаю массив ниже со значениями в первом столбце и Lat, Lon во 2-м и 3-м столбцах:
import numpy as np
lat = np.arange(0, 15, 5)
lon = np.arange(0, 10, 5)
val = np.random.randint(0,10, size =len(lat)*len(lon))
xx, yy = np.meshgrid(lon, lat)
array = np.array([val, yy.ravel(), xx.ravel()]).T
print(array)
>>> array([[ 7, 0, 0],
[ 8, 0, 5],
[ 7, 5, 0],
[ 3, 5, 5],
[ 2, 10, 0],
[ 8, 10, 5]])
Когда ваши координаты Lat, Lon аккуратно отсортированы, вы можете изменить значения, чтобы получить массив сетки, подобный этому:
no_lon = len(np.unique(array[:,-1]))
no_lat = len(np.unique(array[:,-2]))
grid_array = array[:,0].reshape((no_lat,no_lon))[::-1]
print(grid_array)
>>> array([[2, 8],
[7, 3],
[7, 8]])
второй вариант
Если у вас есть несколько случайных лат, Лон координирует со значениями, подобными тем, которые созданы здесь:
array = np.random.randint(0,10, size =(6,3))
print(array)
>>> array([[9 6 0]
[7 8 8]
[6 0 9]
[7 7 4]
[2 4 3]
[0 2 9]])
Вы можете преобразовать это в сетку с помощью интерполяции, например так:
from scipy import interpolate
lon_list = np.arange(3, 6, 1)
lat_list = np.arange(4, 8, 1)
lon_2d, lat_2d = np.meshgrid(lon_list, lat_list)
grid_array = interpolate.griddata((array[:,-1], array[:,-2]), array[:,0],
(lon_2d, lat_2d))[::-1]
print(grid_array)
>>> [[ nan 7. 6.72]
[ 6. 5.4 5.6 ]
[ 4. 3.8 4. ]
[ 2. 2.2 2.4 ]]
Обратите внимание, что вы получите значения нан, если ваши ячейки сетки не находятся в пределах ваших точек.
Вы можете визуализировать результаты, используя plt.imshow
import matplotlib.pyplot as plt
plt.imshow(grid_array)