Python | Как интерполировать два измерения таким образом, чтобы значения x были одинаковыми

#python #interpolation

#python #интерполяция

Вопрос:

У меня есть два измерения, состоящие из пар значений x и y. Я хочу вычислить разницу между этими двумя рядами. Проблема в том, что я не могу просто вычислить разницу между этими двумя измерениями, потому что они по-разному отбираются в значениях x.

 import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

x1 = np.array([1, 2, 3, 4, 5])
y1 = np.array([1, 4, 9, 16, 25])
x2 = np.array([1.5, 2.5, 3.3, 4.2, 5.1])
y2 = np.array([1.3, 2.5, 3.3, 4.2, 5.1])
df = np.array([x1, y1, x2, y2])
df = pd.DataFrame(df.T, columns=['x1', 'y1', 'x2', 'y2'])
df.head()

plt.plot(df.x1.values, df.y1.values, df.x2.values, df.y2.values)
  

Я хотел бы назначить новую переменную x = np.linspace(0, 5, 100, конечная точка = True), а затем определить новые y1_new и y2_new путем интерполяции значений y1 и y2 на значения x.

Я посмотрел на pandas.resample(), но, похоже, это работает с временными метками. Возможно, ‘scipy.interpolate’ может помочь, но я не уверен в возможностях. В принципе, я знаю, как запрограммировать это вручную на python, но я уверен, что решение моей проблемы уже есть.

Ответ №1:

Примером использования scipy.interpolate будет:

 import scipy.interpolate as interp
import numpy as np
x1 = np.array([1, 2, 3, 4, 5])
y1 = np.array([1, 4, 9, 16, 25])
new_x1 = np.linspace(0, 5, 100, endpoint=True)
interpolated_1 = interp.interp1d(x1, y1, fill_value="extrapolate")
new_y1 = interpolated_1(new_x1)
new_y1
  

Все остальные методы более или менее соответствуют одной и той же сигнатуре, как вы можете видеть в документах. Какой из них использовать, зависит от имеющихся у вас базовых данных, например, первый выглядит как квадратичный, а второй — как идентификатор.