用法:
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。