2017-01-17 11 views
1

У меня есть два списка, как list = [[date, value], [date, value] ... [date, value]]Python интерполировать два список с указанием даты стоимостью

И я пытаюсь получить интерполированные списки из этих двух списков.

В первый, у меня полиномиальные coeficients:

import numpy as np 

coefficients = np.polyfit(
    np.array(values_from_x_list),np.array(values_from_y_list), polynomial_degree 
) 

Затем каждое значение из списка X Я пытаюсь интерполировать, как:

from numpy.polynomial.polynomial import polyval 

for value in values: 
    polyval(value, coefficients[::-1]) 

И я получил такое же значение, как из списка Y ,

Вот мой выход, например:

x_list = [ 
    ['2016-12-05', 2.0541010116247905e-06], ['2016-12-17', 1.786168458607079e-06], ['2017-01-10', 2.397426644056526e-06] 
] 

y_list = [ 
    ['2016-12-07', 0.323], ['2016-12-19', 0.527], ['2017-01-07', 0.693] 
] 

interpolated_list = [ 
    ['2016-12-05', 0.323], ['2016-12-17', 0.527], ['2017-01-10', 0.693] 
] 

Так, а вот пример того, что я хочу (что-то вроде этого значения):

interpolated_list = [ 
    ['2016-12-05', 0.2xx], ['2016-12-07', 0.323], ['2016-12-17', 0.4xx], 
    ['2016-12-07', 0.323], ['2017-01-07', 0.693], ['2017-01-10', 0.7xx] 
] 

UPD

I не требуется интерполировать даты, а только значения. Другими словами, я хочу только изменить значения в x_list (а не даты). Даты являются константами в обоих списках.

+0

Вы спрашиваете, как получить дату в числовом значении? Если да, проверьте '' datetime'' (https://docs.python.org/2/library/datetime.html). Вы можете читать каждую дату как новый объект datetime, а затем создавать новую временную ось для каждой даты как '' (date_i-date_0) .total_seconds() '. – alexblae

+0

@alexblae Я не уверен, что это то, что я хочу. Мне просто нужно расширить y_list по x_list, но значения в x_list должны быть ближе к значениям из y_list – Sant

+0

Итак, вы хотите вставить '' x_list'' в '' y_list'' и назначить для вставленных элементов значение из '' y_list'' для которого ближайшая дата? – alexblae

ответ

0
In [317]: x_list = [ ['2016-12-05', 2.0541010116247905e-06], ['2016-12-17', 1.786168458607079e-06], ['2017-01-10', 2.397426644056526e-06]] 

In [319]: dates = np.array([i[0] for i in x_list], dtype='datetime64[D]') 
In [320]: values = np.array([i[1] for i in x_list]) 

In [321]: dates 
Out[321]: array(['2016-12-05', '2016-12-17', '2017-01-10'], dtype='datetime64[D]') 
In [322]: values 
Out[322]: array([ 2.05410101e-06, 1.78616846e-06, 2.39742664e-06]) 

dates с [D] блоком, то есть int64 номера:

In [325]: dates.view(np.int64) 
Out[325]: array([17140, 17152, 17176], dtype=int64) 

и может используемые в математике, например, разница между ними:

In [326]: dates[1:]-dates[:-1] 
Out[326]: array([12, 24], dtype='timedelta64[D]') 

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

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

  • Нет связанных вопросов^_^