2014-01-13 10 views
0

У меня есть 2 Numpy массивылинейная интерполяция в NumPy

X = [[2 3 6], [7 2 9], [7 1 4]] 
a = [0 0.0005413307 0.0010949014 0.0015468832 0.0027740823 0.0033288284] 
b = [0 0.0050251256 0.0100502513 0.0150753769 0.0201005025 0.0251256281] 

new = [] 
for z in range(3): 
    new.append(interp1d(a, z[0], b, 'linear')) 

Я получаю сообщение об ошибке, как:

if xi is not None and shape[axis] != len(xi): 
TypeError: tuple indices must be integers, not str 

Мне нужно найти линейную интерполяцию то же самое. Как я могу это найти?

У меня есть значения X относительно времени a, но я хочу найти интерполяцию для времени b. Линейная интерполяция даст мне 3 балла, как и в X для каждого a [i] и b [i]?

+0

interp1d имеет другую подпись, проверьте документы: http://docs.scipy.org/doc/scipy/reference/generated/scipy. interpolate.interp1d.html –

ответ

3

Вы вводите аргументы в неправильном порядке. Измельчитель является помощь послание interp1d, проверить его:

interp1d(x, y, kind='linear', axis=-1, copy=True, bounds_error=True,fill_value=np.nan) 

Интерполяция функции с 1-D.

x и y являются массивами значений, используемых для аппроксимации некоторой функции F: y = f(x).

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

+0

Я получу объект после этого этапа. как я буду использовать этот объект для получения значений? – sam

2

interp1d - это функция, возвращающее значение которой является новой функцией. Эта новая функция может быть вызвана с значениями в заданном диапазоне интерполяции:

from scipy.interpolate import interp1d 

x1 = [ 0.,   0.04007922, 0.04723573, 0.05440107, 0.06178645, 0.06837938] 
x2 = [ 0.,   0.00502513, 0.01005025, 0.01507538, 0.0201005, 0.02512563] 
f = interp1d(x1, x2) 

f([0.0, 0.01, 0.02, 0.03, 0.068]) 
#array([ 0.  , 0.0012538 , 0.0025076 , 0.0037614 , 0.02483647]) 
+0

Можете ли вы объяснить мне, почему и как вы считаете эти ценности? f ([0.0, 0.01, 0.02, 0.03, 0.068]) – sam

+0

'f' - это функция, где' x2 = f (x1) 'посредством интерполяции. Таким образом, 'f (0.0)' возвращает '0.0' и' f (0.068) 'возвращает' ~ 0.24'. Не путайте с помощью векторизованной нотации. Что вы делаете, это передать список значений в 'f', и в ответ вы вернете список значений, где' f' было применено к каждому отдельному значению в списке. 'x1' должно быть названо' x', а 'x2' должно быть названо' y', поэтому 'y = f (x)', как указано в документах. Надеюсь, это поможет. – Matt

+0

в зависимости от вашего объяснения я v обновленный вопрос. вы хотите сказать, что я должен где-то X? Я не понял, как вы приняли значение 0,068. вы можете объяснить с обновленным вопросом? – sam

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