У меня есть 2 2D массива позиций x и y, которые выражают значения контурного графика.Поскольку я перевожу контурный график несколько раз, мне нужно отслеживать исходные координаты по мере их перемещения, чтобы я мог выразить окончательное смещение во всех точках исходного изображения.
Я пишу на python3, используя scipy.interpolate.interp1d.После одной итерации у меня нет проблем, и координаты были успешно интерполированы обратно в исходную сетку.Я распечатываю последние 10 элементов одного из столбцов в массиве 2D:
import numpy as np
from scipy.interpolate import interp1d
print(y_coordinate[-10:, 20])
>>> [ 60. 61. 62. 63. 64. nan nan nan nan nan]
У меня есть nans, потому что смещение было равно -5 в направлении y изображения шириной 64 пикселя, поэтому 5 пикселейвверху сместились вниз.Проблема в том, что на следующем шаге у меня нулевое смещение в направлении y, поэтому точки здесь не перемещаются, но они могут перемещаться в другое место в моем большом массиве, поэтому необходимо выполнить интерполяцию по всему массиву.
Я интерполирую столбец за столбцом, используя scipy.interpolate.interp1d следующим образом (и для ясности удаляю индексы массива, но знаю, что они такие же, как в предыдущих строках выше):
f = interp1d(y, y_coordinate, kind='linear', bounds_error = False)
new_y_coordinate = f(y)
где y_coordinate - этокак указано выше, y равно
>>>[55,56,57,58,59,60,61,62,63,64]
По сути, я хочу, чтобы он возвращал точно такие же значения, как они уже лежат в точках, на которые я хочу его интерполировать.Вместо этого я получаю это:
print(new_y_coordinate)
>>> [ 60. 61. 62. 63. nan nan nan nan nan nan]
У меня есть нано, вползающая в хорошие данные.Что странно, во-первых, я попробовал это с комплексными числами и подумал, что это было ошибкой.Затем я изменил его на два массива действительных чисел и обнаружил, что ошибка была решена в левой части массива (для преобразований в направлении х), но теперь она возникает сверху для преобразований смещения у.В простом тесте, который я проводил с похожей ситуацией, этой ошибки вообще не было.
Есть идеи о том, что происходит и как я могу ее решить?