2017-01-06 3 views
1

Что такое самый простой и быстрый способ интерполирования между двумя массивами для получения нового массива.интерполяция между массивами в python

Например, у меня есть 3 массива:

x = np.array([0,1,2,3,4,5]) 
y = np.array([5,4,3,2,1,0]) 
z = np.array([0,5]) 

х, у соответствуют данным точек и г является аргументом. Таким образом, при z=0 массив x действителен, и в z=5 y массив действителен. Но мне нужно получить новый массив для z=1. Таким образом, он может быть легко решен:

a = (y-x)/(z[1]-z[0])*1+x

Проблема заключается в том, что данные не линейно зависимы, и есть более чем в 2 массивов данных. Может быть, можно каким-то образом спланировать интерполяцию?

+0

Вы изучали интерполированные документы 'scipy'? – hpaulj

+0

Прежде чем задать вопрос, я посмотрел на него и не нашел прямых решений. У вас есть ключ к решению проблемы? – DumbQ

ответ

2

Это проблема одномерной многомерной регрессии. Scipy поддерживает одномерную одномерную регрессию и многомерную для одномерной регрессии. Но вы можете вместо этого перебирать выходы, поэтому это не такая уж большая проблема. Ниже приведен пример того, как это можно сделать. Я изменил имена переменных немного и добавил новый пункт:

import numpy as np 
from scipy.interpolate import interp1d 

X = np.array([0, 5, 10]) 
Y = np.array([[0, 1, 2, 3, 4, 5], 
       [5, 4, 3, 2, 1, 0], 
       [8, 6, 5, 1, -4, -5]]) 

XX = np.array([0, 1, 5]) # Find YY for these 

YY = np.zeros((len(XX), Y.shape[1])) 
for i in range(Y.shape[1]): 
    f = interp1d(X, Y[:, i]) 
    for j in range(len(XX)): 
     YY[j, i] = f(XX[j]) 

YY Так являются результатом для XX. Надеюсь, поможет.

Смежные вопросы