Scipy interp1d Результаты кубической интерполяции различаются между scipy 0.18.1 и 1.2.1? - PullRequest
0 голосов
/ 20 сентября 2019

Результаты, полученные путем интерполяции kind='cubic' с использованием interp1d, по-видимому, изменяются между scipy 0.18.1 и 1.2.1.Я использую python 2.7.12 / numpy 1.12.0 с первым и python 3.6.8 / numpy 1.16.2 с последним.Какое изменение в исходном коде отвечает за разные результаты?

Пример кода:

import numpy as np
from scipy.interpolate import interp1d
import matplotlib.pyplot as plt

np.random.seed(1000)
n_p = 6
n_p_interpolated = 11

a = np.linspace(0,5,n_p)
a_interpolated = np.linspace(0,5,n_p_interpolated)
b = np.random.rand(n_p)

b_interpolated = interp1d(a,b,kind='cubic')(a_interpolated)

print('b:', b)
print('b_interpolated:', b_interpolated)

plt.ion()
plt.figure()
plt.plot(a,b,label='original data')
plt.plot(a_interpolated,b_interpolated,label='interpolated data')
plt.legend()
plt.xlim(-1,6)
plt.ylim(-0.2,1)

С scipy 0.18.1:

('b:', array([ 0.65358959,  0.11500694,  0.95028286,  0.4821914 ,  0.87247454,
        0.21233268]))
('b_interpolated:', array([ 0.65358959, -0.1292027 ,  0.11500694,  0.64514961,  0.95028286,
        0.75328508,  0.4821914 ,  0.58350879,  0.87247454,  0.95267129,
        0.21233268]))

С scipy 1.2.1:

b: [0.65358959 0.11500694 0.95028286 0.4821914  0.87247454 0.21233268]
b_interpolated: [ 0.65358959 -0.05237073  0.11500694  0.62584926  0.95028286  0.75365451
  0.4821914   0.60133139  0.87247454  0.88101143  0.21233268]

Все интерполированные значения (которых нет в исходной сетке) отличаются, некоторые довольно резко (например, второе).

1 Ответ

1 голос
/ 22 сентября 2019

Да, алгоритм построения сплайна был изменен.В scipy 0.18 и ниже он использовал алгоритм find_smoothest (см. Scipy / interpolate / interpolate.py в репозитории scipy source, pre scipy 0.19.0).Начиная с версии 0.19.0, алгоритм по умолчанию для кубики не является узлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...