scipy.interpolate.interp1d with kind = "previous" не экстраполирует должным образом - PullRequest
0 голосов
/ 13 декабря 2018
import numpy as np
from scipy.interpolate import interp1d

a = np.arange(10)
b = a + 100

iterp = interp1d(a, b, kind="previous", bounds_error=False)
print(iterp([-1,-2,5,8,12,25]))
# [nan nan  105.  108. nan nan]

Первые два значения nan имеют смысл, но последние два - нет, поскольку доступно предыдущее значение.

Теперь, если я использую extrapolate:

iterp = interp1d(a, b, kind="previous", fill_value="extrapolate")
print(iterp([-1,-2,5,8,12,25]))
# [100. 100. 105. 108. 109. 109.]

Последние два 109. имеют смысл, но первые два 100. не имеют смысла, так как нет предыдущего значения.

Вывод, который я ищу, интуитивно понятен [nan nan 105. 108. 109. 109.].Конечно, я могу взять любой из вариантов выше в качестве основы и возиться с этим.Но есть ли прямой способ получить желаемый результат?

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошо, этот обходной путь не так уж и плох, я думаю:

iterp = interp1d(a, b, kind="previous", fill_value=(np.nan, b.max()), bounds_error=False)
print(iterp([-1,-2,5,8,12,25]))
# [ nan  nan 105. 108. 109. 109.]
...