本文簡要介紹 python 語言中 numpy.lib.stride_tricks.sliding_window_view
的用法。
用法:
lib.stride_tricks.sliding_window_view(x, window_shape, axis=None, *, subok=False, writeable=False)
使用給定的窗口形狀在數組中創建一個滑動窗口視圖。
也稱為滾動或移動窗口,窗口在數組的所有維度上滑動,並在所有窗口位置提取數組的子集。
- x: array_like
用於創建滑動窗口視圖的數組。
- window_shape: int 或 int 的元組
參與滑動窗口的每個軸上的窗口大小。如果軸不存在,則長度必須與輸入數組維度的數量相同。單個整數 i 被視為元組 (i,)。
- axis: int 或 int 元組,可選
沿其應用滑動窗口的軸。默認情況下,滑動窗口應用於所有軸,window_shape[i] 將引用 x 的軸 i。如果axis作為int的元組給出,window_shape[i]將引用x的軸axis[i]。單個整數 i 被視為元組 (i,)。
- subok: 布爾型,可選
如果為 True,則子類將為 passed-through,否則返回的數組將被強製為 base-class 數組(默認)。
- writeable: 布爾型,可選
如果為 true,則允許寫入返回的視圖。默認值為 false,因為應謹慎使用:返回的視圖多次包含相同的內存位置,因此寫入一個位置會導致其他位置發生更改。
- view: ndarray
陣列的滑動窗口視圖。最後插入滑動窗口尺寸,並根據滑動窗口的大小對原始尺寸進行修剪。即
view.shape = x_shape_trimmed + window_shape
,其中x_shape_trimmed
是x.shape
,每個條目都比相應的窗口大小小一。
參數:
返回:
注意:
對於許多應用程序來說,使用滑動窗口視圖可能很方便,但可能會非常慢。通常存在專門的解決方案,例如:
scipy.ndimage
中的過濾函數bottleneck 提供的移動窗口函數。
作為粗略的估計,輸入大小為 N 和窗口大小為 W 的滑動窗口方法將縮放為 O(N*W),而特殊算法通常可以達到 O(N)。這意味著窗口大小為 100 的滑動窗口變體可能比更專業的版本慢 100 倍。
然而,對於小窗口大小,當不存在自定義算法時,或者作為原型設計和開發工具,此函數可能是一個很好的解決方案。
例子:
>>> x = np.arange(6) >>> x.shape (6,) >>> v = sliding_window_view(x, 3) >>> v.shape (4, 3) >>> v array([[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]])
這也適用於更多維度,例如
>>> i, j = np.ogrid[:3, :4] >>> x = 10*i + j >>> x.shape (3, 4) >>> x array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23]]) >>> shape = (2,2) >>> v = sliding_window_view(x, shape) >>> v.shape (2, 3, 2, 2) >>> v array([[[[ 0, 1], [10, 11]], [[ 1, 2], [11, 12]], [[ 2, 3], [12, 13]]], [[[10, 11], [20, 21]], [[11, 12], [21, 22]], [[12, 13], [22, 23]]]])
可以顯式指定軸:
>>> v = sliding_window_view(x, 3, 0) >>> v.shape (1, 4, 3) >>> v array([[[ 0, 10, 20], [ 1, 11, 21], [ 2, 12, 22], [ 3, 13, 23]]])
同一軸可以多次使用。在這種情況下,每次使用都會減少相應的原始維度:
>>> v = sliding_window_view(x, (2, 3), (1, 1)) >>> v.shape (3, 1, 2, 3) >>> v array([[[[ 0, 1, 2], [ 1, 2, 3]]], [[[10, 11, 12], [11, 12, 13]]], [[[20, 21, 22], [21, 22, 23]]]])
結合階梯式切片(::step),這可用於獲取跳過元素的滑動視圖:
>>> x = np.arange(7) >>> sliding_window_view(x, 5)[:, ::2] array([[0, 2, 4], [1, 3, 5], [2, 4, 6]])
或按多個元素移動的視圖
>>> x = np.arange(7) >>> sliding_window_view(x, 3)[::2, :] array([[0, 1, 2], [2, 3, 4], [4, 5, 6]])
sliding_window_view
的一個常見應用是運行統計數據的計算。最簡單的例子是moving average:>>> x = np.arange(6) >>> x.shape (6,) >>> v = sliding_window_view(x, 3) >>> v.shape (4, 3) >>> v array([[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4, 5]]) >>> moving_average = v.mean(axis=-1) >>> moving_average array([1., 2., 3., 4.])
請注意,滑動窗口方法通常是不是最佳(見注釋)。
相關用法
- Python numpy std用法及代碼示例
- Python numpy stack用法及代碼示例
- Python numpy searchsorted用法及代碼示例
- Python numpy shape用法及代碼示例
- Python numpy scimath.log用法及代碼示例
- Python numpy signbit用法及代碼示例
- Python numpy setdiff1d用法及代碼示例
- Python numpy seterr用法及代碼示例
- Python numpy sort用法及代碼示例
- Python numpy scimath.logn用法及代碼示例
- Python numpy square用法及代碼示例
- Python numpy scimath.log2用法及代碼示例
- Python numpy sum用法及代碼示例
- Python numpy spacing用法及代碼示例
- Python numpy seterrobj用法及代碼示例
- Python numpy squeeze用法及代碼示例
- Python numpy scimath.arccos用法及代碼示例
- Python numpy shares_memory用法及代碼示例
- Python numpy s_用法及代碼示例
- Python numpy swapaxes用法及代碼示例
- Python numpy sctype2char用法及代碼示例
- Python numpy show_config用法及代碼示例
- Python numpy set_printoptions用法及代碼示例
- Python numpy source用法及代碼示例
- Python numpy save用法及代碼示例
注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.lib.stride_tricks.sliding_window_view。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。