У меня есть
[[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8]]
, и я хочу интерполировать его в повернутую сетку с углом на левом краю.Аналогично:
[[2, ~2, 2],
[~4, ~4, ~4],
[6, ~6, 6]]
(я использую ~
для обозначения приблизительных значений.)
(Конечно, мои фактические данные более сложные. Сценарий таков, что я хочу отобразить DEMданные по пикселям на повернутое изображение.)
Вот установка:
import numpy
from scipy import interpolate as interp
grid = numpy.ndarray((5, 5))
for I in range(grid.shape[0]):
for j in range(grid.shape[1]):
grid[I, j] = I + j
grid = ndimage.interpolation.shift(
ndimage.interpolation.rotate(grid, -45, reshape=False),
-1)
source_x, source_y = numpy.meshgrid(
numpy.arange(0, 5), numpy.arange(0, 5))
target_x, target_y = numpy.meshgrid(
numpy.arange(0, 2), numpy.arange(0, 2))
print(interp.griddata(
numpy.array([source_x.ravel(), source_y.ravel()]).T,
grid.ravel(),
target_x, target_y))
Это дает мне:
[[2.4467 2.6868 2.4467]
[4. 4. 4. ]
[5.5553 5.3132 5.5553]]
Это многообещающе.Однако значения поворота и сдвига жестко запрограммированы, и я должен, по крайней мере, иметь возможность получить точный верхний левый угол.
Я знаю индексы углов сетки, к которым я хочу интерполировать,То есть у меня
upper_left = 2, 0
upper_right = 0, 2
lower_right = 4, 2
lower_left = 2, 4