如果沒有一些標準的庫函數,特別是在numpy或scipy中,但沒有任何Google搜索提供正確的答案,我會感到震驚。Python - 零級保持插值(最近鄰居)
我從Poloniex交換 - cryptocurrency獲取數據。把它看作是把股票價格 - 買入和賣出訂單 - 推到你的電腦上。所以我所擁有的是任何特定市場的時間價格。一個市場可能每天更新10次,而另一個市場每分鐘更新10次 - 這取決於市場上有多少人正在購買和銷售。
所以我的時間序列數據最終會被這樣的:
[1 0.0003234,
1.01 0.0003233,
10.0004 0.00033,
124.23 0.0003334,
...]
當第一列是時間值(我使用的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,
...]
我想用任何合理的時間步驟來做到這一點。現在我使用np.linspace(start_time, end_time, time_step)
來創建新的時間向量。
寫我自己的,固然粗糙的,零階保持插值器不會那麼難。我將遍歷原始時間向量並使用np.nonzero來查找新時間向量中適合一個時間戳(t0)和下一個(t1)的所有索引,然後用時間t0的值填充這些索引。
現在,粗略的方法將起作用。價格矩陣並不那麼大。但我必須考慮使用其中一個內置庫的更快速的方法。我無法找到它。此外,對於上述示例,我僅使用Nx2矩陣(第1列:時間,第2列:價格),但最終市場有6或8個可能更新的不同參數。一個方法/庫函數可以處理多個價格,並且在不同的列中會很好。
Python 3.5通過Windows 7上的蟒蛇(希望無所謂)。
TIA
因爲我將數據存儲爲一個numpy矩陣,所以我需要稍微調整一下代碼。具體來說,'''''''= f = interpolate.interp1d(np.asarray(a [:,0])[:,0],a [:, 1],kind ='zero',axis = 0)'上面的數據。我唯一遇到的其他問題是linspace輸出一個行向量,所以我需要將它提供給f'new_y = f(new_x.T)',其中new_x是linspace的輸出。 –
另外,感謝interp1d上的例子。我在谷歌搜索中看到了很多,但我從來沒有看到任何參考或'kind'參數的例子。 –
@gabe很高興能幫到你! – jotasi