np.lib.stride_tricks.as_strided 详解

这个模块是 numpy 里面的一个高效分块操作。

numpy.lib.stride_tricks.as_strided(x, shape=None, strides=None, subok=False, writeable=True)

例如如果我们把矩阵 A:
A = [ 1 2 5 6 3 4 7 8 9 10 13 14 11 12 15 16 ] A = \left[ \begin{matrix} 1 & 2 & 5 & 6 \\ 3 & 4 & 7 & 8 \\ 9 & 10 & 13 & 14 \\ 11 & 12 & 15 & 16 \end{matrix} \right] A=13911241012571315681416
分成 矩阵B:
B = [ [ 1 2 3 4 ] [ 5 6 7 8 ] [ 9 10 11 12 ] [ 13 14 15 16 ] ] B = \left[ \begin{matrix} \left[ \begin{matrix} 1 & 2 \\ 3 & 4 \end{matrix} \right] \left[ \begin{matrix} 5 & 6 \\ 7 & 8 \end{matrix} \right]\\ \left[ \begin{matrix} 9 & 10 \\ 11 & 12 \end{matrix} \right] \left[ \begin{matrix} 13 & 14 \\ 15 & 16 \end{matrix} \right] \end{matrix} \right] B=[1324][5768][9111012][13151416]
B 由 2 * 2 个 2* 2 的矩阵构成,所以B 的形状是 (2, 2, 2,2),所以第一个参数shape应该为 (2, 2, 2, 2)。
这里按步长为2 进行分块 (水平垂直每个点各距离2个点的距离)

而strides 表示整个内部 22 的矩阵在外部 22 的矩阵中的移动步长和内部 2*2 的矩阵内部的需要移动的步长。
详细点说就是:
例如从1—>9 需要移动 外部矩阵的width * stride 的步数,也就是需要移动 4 * 2 = 8 步数,所以第一个值为8.
表示需要从1 —> 2 —> 3 —> 4 —> 5 —> 6 —> 7 —> 8 —> 9需要经过8个步长。
同理从第一个内部矩阵移动到第二个内部矩阵表示从1 —> 5, 需要 stride = 2 步。所以第二个值为2,至此外部的移动完毕。
同理,内部的移动从第一个行第一个点到第二行的第一个点也就是1 —> 3 (这里的3 不代表最后一行,而是表示下一行,只是这里是2 *2 所以第二行也是最后一行) 需要 外部 width = 4 步,也就是1 —> 2 —> 3 —> 4 —> 5,所以第三个值为4.
同理从第一列到第二列1 —> 2 需要1 步,所以第四个值为1.
至此得 strides = (8, 2, 4, 1).
剩下的参数可以参考package说明。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值