Как я могу рассчитать значения, используя несколько мгрид с различным происхождением и или форм - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь понять, могу ли я работать с арифметикой растровых данных ГИС в python, используя nndy ndarrays.Я вычисляю значения вероятности (z) для нескольких определенных областей (x, y) и хочу впоследствии сложить вероятности.Сетки перекрываются, но не имеют одинаковых размеров в x, y.Результат должен показать вероятности, добавленные там, где сетки перекрываются, и сохранить значения вероятностей соответствующих сеток там, где их нет.

Я разработал сетки, но не могу сложить их вместе.Это может быть сделано в NumPy или мне нужно использовать инструменты Rasterio / GDAL?Являются ли мгриды лучшим подходом?

Я создал несколько простых мгрид, чтобы проиллюстрировать проблему.

ys, xs = np.mgrid[5:15:5j, 0:5:5j]
f = lambda x, y: x * y + 1
vf = np.vectorize(f)
r = vf(xs, ys)
c1 = np.array([xs, ys, r])

ys2, xs2 = np.mgrid[4:9:6j, 1:6:6j]
f2 = lambda x, y: x + y * 2
vf2 = np.vectorize(f2)
r2 = vf2(xs2, ys2)
c2 = np.array([xs2, ys2, r2])

Чтобы построить их:

plt.contourf(c1[0], c1[1], c1[2], levels = 100)
plt.colorbar()
plt.show()

c1участок

plt.contourf(c2[0], c2[1], c2[2], levels = 100)
plt.colorbar()
plt.show()

участок c2

1 Ответ

0 голосов
/ 28 октября 2018

Ваши две сетки не находятся в строгих отношениях надмножество-подмножество.Вот как они выглядят:

two grids plotted in 2d

Как видите, в то время как домены двух сеток перекрываются, фактическая сеткаточки не пересекаются, за исключением одной точки сетки.

Как бы вы накапливали эти точки данных?Массивы, которые у вас есть, хранят вероятность z_i = z(x_i, y_i) для каждой точки сетки.Функция является дискретной и определяется только в сетке.Вы не можете добавить два набора данных, если их точки сетки не соответствуют друг другу.Это не имеет никакого смысла.

Что вы могли бы сделать, это интерполировать данные из одной из сеток и добавить , что , в другую сетку (или третья общая сетка).Это не будет точным, и может работать, только если ваши данные достаточно гладко.Кроме того, ваши сетки имеют только частичное перекрытие, поэтому вам придется выяснить, как обрабатывать регионы, где у вас есть несколько точек, по сравнению с теми, где у вас их нет.contourf также будет принимать данные, которые являются 2d-пледом (то есть, как если бы они были сгенерированы из mgrid).Таким образом, ответ на ваш первоначальный вопрос: «Вы не можете сделать это прямо».

...