用法:
dask.array.lib.stride_tricks.sliding_window_view(x, window_shape, axis=None)
使用給定的窗口形狀在數組中創建一個滑動窗口視圖。
此文檔字符串是從 dask.array.numpy_compat.sliding_window_view 複製而來的。
可能存在與 Dask 版本的一些不一致之處。
也稱為滾動或移動窗口,窗口在數組的所有維度上滑動,並在所有窗口位置提取數組的子集。
- x:array_like
用於創建滑動窗口視圖的數組。
- window_shape:int 或 int 的元組
參與滑動窗口的每個軸上的窗口大小。如果
axis
不存在,則長度必須與輸入數組維數相同。單個整數i
被視為元組(i,)
。- axis:int 或 int 的元組,可選
沿其應用滑動窗口的軸。默認情況下,滑動窗口應用於所有軸,
window_shape[i]
將引用x
的軸i
。如果axis
作為tuple of int
,window_shape[i]
給出,將參考x
的軸axis[i]
。單個整數i
被視為元組(i,)
。- subok:bool,可選(在 Dask 中不支持)
如果為 True,則子類將為 passed-through,否則返回的數組將被強製為 base-class 數組(默認)。
- writeable:bool,可選(在 Dask 中不支持)
如果為 true,則允許寫入返回的視圖。默認值為 false,因為應謹慎使用:返回的視圖多次包含相同的內存位置,因此寫入一個位置會導致其他位置發生更改。
- view:ndarray
陣列的滑動窗口視圖。最後插入滑動窗口尺寸,並根據滑動窗口的大小對原始尺寸進行修剪。即
view.shape = x_shape_trimmed + window_shape
,其中x_shape_trimmed
是x.shape
,每個條目都比相應的窗口大小小一。
參數:
返回:
注意:
對於許多應用程序來說,使用滑動窗口視圖可能很方便,但可能會非常慢。通常存在專門的解決方案,例如:
scipy.signal.fftconvolve
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 dask.array.linalg.norm用法及代碼示例
- Python dask.array.linalg.svd用法及代碼示例
- Python dask.array.linalg.svd_compressed用法及代碼示例
- Python dask.array.linalg.lu用法及代碼示例
- Python dask.array.linalg.qr用法及代碼示例
- Python dask.array.less用法及代碼示例
- Python dask.array.logical_or用法及代碼示例
- Python dask.array.log1p用法及代碼示例
- Python dask.array.ldexp用法及代碼示例
- Python dask.array.log2用法及代碼示例
- Python dask.array.logical_and用法及代碼示例
- Python dask.array.logical_not用法及代碼示例
- Python dask.array.log10用法及代碼示例
- Python dask.array.logaddexp2用法及代碼示例
- Python dask.array.logical_xor用法及代碼示例
- Python dask.array.log用法及代碼示例
- Python dask.array.logaddexp用法及代碼示例
- Python dask.array.stats.ttest_ind用法及代碼示例
- Python dask.array.ma.masked_values用法及代碼示例
- Python dask.array.divmod用法及代碼示例
注:本文由純淨天空篩選整理自dask.org大神的英文原創作品 dask.array.lib.stride_tricks.sliding_window_view。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。