numpy.lib.stride_tricks.as_strided
的結果是否取決於NumPy數組的dtype?numpy.as_strided的結果是否取決於輸入dtype?
這個問題源於的.strides
定義,這是字節遍歷一個數組的,則進入步驟在每個維度上的
元組。
以下是我在其他問題中使用的以下函數。它需要一個1d或2d陣列並創建長度爲window
的重疊窗口。結果會比輸入大一個維度。
def rwindows(a, window):
if a.ndim == 1:
a = a.reshape(-1, 1)
shape = a.shape[0] - window + 1, window, a.shape[-1]
strides = (a.strides[0],) + a.strides
windows = np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
return np.squeeze(windows)
# examples
# rwindows(np.arange(5), window=2)
# rwindows(np.arange(20).reshape((5,4)), window=2)
因爲進步的定義,因爲,例如,否則相當於D型float32
和float64
的陣列都會有不同的進展,將這個不斷炸燬我rwindows
功能上面?
我試過測試,但它是以非窮舉的方式,並且正在尋找一個答案,(1)解釋函數doc中的免責聲明/警告是否與我在這裏提出的問題有關和(2)解釋了爲什麼或者爲什麼沒有其他等效陣列具有不同的dtype &步長會在上述中產生不同的結果。
我見過兩個問題。如果形狀不正確,則可以在緩衝區末尾「跨越」。沒有保證確保所有索引值都是有效的。其次,跨步陣列上的許多操作都會複製。該副本可能比原始數組或大視圖大得多;對於多維跨步(2或3d窗口)更是如此。 – hpaulj
呵呵。看起來這個功能已經足夠流行,現在他們正在記錄它。 – user2357112