2009-07-29 2 views
20

У меня есть набор данных, который выглядит как:Python интерполяция

Table-1 
    X1 | Y1 
    ------+-------- 
    0.1 | 0.52147 
    0.02 | 0.8879 
    0.08 | 0.901 
    0.11 | 1.55 
    0.15 | 1.82 
    0.152 | 1.95 

Table-2 
    X2 | Y2 
    -----+------ 
    0.2 | 0.11 
    0.21 | 0.112 
    0.34 | 0.120 
    0.33 | 1.121  

Я должен интерполировать значение Y2 из таблицы-2 для X1 значений из таблицы-1, то есть, мне нужно найти значение из Y2 для следующих значений: X

X1  | Y2 
    -------+------- 
    0.1 | 
    0.02 | 
    0.08 | 
    0.11 | 
    0.15 | 
    0.152 | 

Примечание: Обе Таблица-1 & 2 имеют неодинаковые интервалы. Количество записей (X, Y) будет отличаться, например, здесь мы имеем 6 (X1, Y1) записей в таблице 1 и только 4 (X2, Y2) в таблице 2.

Какой алгоритм интерполяции следует использовать в Numpy и как продолжить?

ответ

29

numpy.interp, кажется, функция, которую вы хотите: передать ваши X1 в качестве первого аргумента х, ваш X2 в качестве второго аргумента хр, ваш Y2 в качестве третьего аргумента FP, и вы получите значения Y, соответствующий X1 координаты.

Y2_at_X1 = np.interp(X1, X2, Y2) 

Я предполагаю, что вы хотите, чтобы полностью игнорировать существующие Y1 значения. Это то, что делает вышеприведенный фрагмент. В противном случае вам нужно будет уточнить свой вопрос, чтобы объяснить, какую роль у вас может быть для Y1!

Если вы хотите более чем линейную интерполяцию, я предлагаю вам взглянуть на scipy.interpolate и его tutorial, а не пытаться растягивать numpy за его простоту ;-).

+0

Спасибо Alex, Честно говоря, у меня есть идеи .. Извините за плохое объяснение! для этой интерполяции и экстраполяции «Y2» i НЕ используйте значения «Y1». Но я буду хранить его как массив и использовать его дальше. Но моя функция нелинейна, можно ли использовать некоторые нелинейные методы интерполяции? (например, Newton, Lagrange type и т. д.) для лучшей точности ... Еще раз спасибо – 2009-07-29 15:15:03

+0

NP, см. мой отредактированный ответ для указателей на scipy код, который поддерживает нелинейную интерполяцию. –

+0

С этими конкретными значениями все результаты от 'numpy.interp' будут равны 0.11. Все данные X1 находятся за пределами диапазона данного X2, поэтому на самом деле это не совсем интрепляция. Чтобы получить значимый результат, вам нужно будет подогнать определенную параметризованную функцию к X2: Y2, а затем eval для X1 - вы можете получить очень разные результаты в зависимости от выбора функции. – greggo