我撰寫了一個函式,可以根據給定的視窗長度重塑 numpy 陣列。該函式執行以下操作。

我的功能如下:
def w_s(df, l):
"""
Convert numpy array into desired shape with lag 1.
Args:
df (numpy.ndarray): Numpy array.
l (integer): Length of the sample window.
Returns:
Returns numpy array in a desired shape to be used in decision trees.
"""
data = np.zeros((l, 1))
data = np.append(data, df)
data = data[l:]
for i in range(1, l):
s1 = np.roll(df,0-i)
data = np.append(data,s1)
data = data.reshape(l, len(df)).T
return data[:-(l-1)]
我有兩個長度為1780000. 該功能大約需要3個小時。
CPU times: user 5min 20s, sys: 43min 45s, total: 49min 6s Wall time: 3h 5min 46s
我的機器是 Mac M1。我在 Jupyter 單元上運行它,服務器在 Firefox 上運行。我怎樣才能更快地做到這一點?
uj5u.com熱心網友回復:
那是sliding_window_view:
>>> import numpy as np
>>> arr = np.arange(10)
>>> np.lib.stride_tricks.sliding_window_view(arr, 5)
array([[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7],
[4, 5, 6, 7, 8],
[5, 6, 7, 8, 9]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/527336.html
