#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
Все остальные методы более или менее соответствуют одной и той же сигнатуре, как вы можете видеть в документах. Какой из них использовать, зависит от имеющихся у вас базовых данных, например, первый выглядит как квадратичный, а второй — как идентификатор.