Интерполировать сюжет только на определенных интервалах - PullRequest
0 голосов
/ 30 января 2019

Интерполяция перекрывает данные в нулях

Попытка вертикального графика (x по сравнению с y) с плавной кривизной данных по оси Y.Попробовал сплайны и сплипы SciPy.interpolate на всем графике (y [0] -y [-1]).На этом интервале данные x являются положительными, колеблющимися и падают до нуля несколько раз.Интерполяция становится отрицательной (превышение) в нулях.Вот пример данных:

e = np.array([-0.65067307, -0.61057307, -0.57057307, -0.53057307, -0.49047307,
              -0.45047307, -0.41037307, -0.37037307, -0.33037307, -0.29027307,
              -0.25027307, -0.21017307, -0.17017307, -0.13017307, -0.09007307,
              -0.05007307, -0.00997307,  0.03002693,  0.07002693,  0.11012693,
               0.15012693,  0.19022693,  0.23022693,  0.27022693,  0.31032693])

x = np.array([0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    ,
              0.    , 1.1015, 3.0956, 2.2363, 2.4597, 1.8997, 1.5912, 1.6496,
              0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    , 0.    ,
              0.    ])

y = np.arange(e[0],e[-1],0.001)
spl = splrep(e,x)
xDat = splev(y,spl)
plt.plot(x,e,'k.',xDat,y,'r-',lw=0.5)

Мне нужно, чтобы график был гладким, но не колебался относительно нулей.Это должно внезапно исчезнуть в нулях.Я думаю об ограничении алгоритма сглаживания интервалами ненулевых (или, по крайней мере, выше некоторого значения отсечения) данных.Ищу другие мнения по этому вопросу.

1 Ответ

0 голосов
/ 30 января 2019

Решил это.Проверьте это ...

from scipy.interpolate import interp1d

y = np.arange(e[0],e[-1],0.001)
l = [0 if i==0 else 1 for i in interp1d(e,x)(y)]
xDat = splev(y,splrep(e,x)) * l
plt.plot(x,e,'k.',xDat[xDat>=0],y[xDat>=0],'r-',lw=0.5)

Используется линейная интерполяция для генерации пошаговой функции, содержащей ненулевые данные.Умножение фактических данных с помощью этой функции и построение только положительных значений сделали свое дело.Спасибо за совет по условной нарезке ...

...