Python使用日期值插入两个列表

时间:2017-01-17 15:57:07

标签: python numpy scipy interpolation approximation

我有两个列表,例如list = [[date, value], [date, value] ... [date, value]]

我试图从这两个列表中获取插值列表。

起初,我有多项式系数:

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

我不需要插值日期,只需要值。换句话说,我只想更改x_list(而不是日期)中的值。日期是两个列表中的常量。

1 个答案:

答案 0 :(得分: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中使用的数值的一步。