Gab*_*lin 3 python interpolation numpy
如果没有一些标准库函数,我会感到震惊,尤其是在 numpy 或 scipy 中,但没有多少谷歌搜索提供了一个像样的答案。
我正在从 Poloniex 交易所获取数据 - 加密货币。把它想象成将股票价格 - 买卖订单 - 推送到您的计算机。所以我所拥有的是任何给定市场的价格时间序列。一个市场可能每天更新 10 次,而另一个市场每分钟更新 10 次——这完全取决于市场上买卖的人数。
所以我的时间序列数据最终会是这样的:
[1 0.0003234,
1.01 0.0003233,
10.0004 0.00033,
124.23 0.0003334,
...]
Run Code Online (Sandbox Code Playgroud)
其中第一列是时间值(我使用 Unix 时间戳到微秒,但认为在示例中没有必要。第二列将是价格之一 - 买入或卖出价格。
我想要的是将它转换成一个矩阵,其中数据在固定的时间范围内被“采样”。所以插值(零阶保持)矩阵将是:
[1 0.0003234,
2 0.0003233,
3 0.0003233,
...
10 0.0003233,
11 0.00033,
12 0.00033,
13 0.00033,
...
120 0.00033,
125 0.0003334,
...]
Run Code Online (Sandbox Code Playgroud)
我想以任何合理的时间步长来做到这一点。现在我np.linspace(start_time, end_time, time_step)用来创建新的时间向量。
编写我自己的,公认的粗糙的零阶保持插值器不会那么难。我将遍历原始时间向量并使用 np.nonzero 查找新时间向量中适合一个时间戳 (t0) 和下一个时间戳 (t1) 之间的所有索引,然后用时间 t0 的值填充这些索引。
现在,粗略的方法会奏效。价格矩阵并不是那么大。但是我必须考虑使用其中一个内置库的更快方法。我就是找不到。
此外,对于上面的示例,我仅使用 Nx2 矩阵(第 1 列:时间,第 2 列:价格),但最终市场有 6 或 8 个可能会更新的不同参数。可以在不同列中处理多个价格等的方法/库函数会很棒。
Python 3.5 通过 Windows 7 上的 Anaconda(希望无关紧要)。
TIA
对于您的问题,您可以使用scipy.interpolate.interp1d. 它似乎可以为所欲为。如果您指定 ,它可以进行零阶保持插值kind="zero"。它还可以同时插入矩阵的多列。您只需指定适当的axis. f = interp1d(xData, yDataColumns, kind='zero', axis=0)然后将返回一个函数,您可以在插值范围内的任何点对其进行评估。然后,您可以通过调用来获取规范化数据f(np.linspace(start_time, end_time, time_step)。
| 归档时间: |
|
| 查看次数: |
3989 次 |
| 最近记录: |