import numpy as npn=4m=5a = np.arange(1,n*m+1).reshape(n,m)print(a)# [[ 1 2 3 4 5]# [ 6 7 8 9 10]# [11 12 13 14 15]# [16 17 18 19 20]]sz = a.itemsizeh,w = a.shapebh,bw = 2,2shape = (h/bh, w/bw, bh, bw)print(shape)# (2, 2, 2, 2)strides = sz*np.array([w*bh,bw,w,1])print(strides)# [40 8 20 4]blocks=np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)print(blocks)# [[[[ 1 2]# [ 6 7]]# [[ 3 4]# [ 8 9]]]# [[[11 12]# [16 17]]# [[13 14]# [18 19]]]]
从
1in
a(即
blocks[0,0,0,0])开始,到
2(即
blocks[0,0,0,1])的距离只有一项。由于(在我的机器上)
a.itemsize为4个字节,因此跨度为1* 4 =4。这为我们提供了中的最后一个值
strides = (10,2,5,1)*a.itemsize = (40,8,20,4)。
从另一处开始
1,要到达
6(即
blocks[0,0,1,0])距离5(即
w)个项目,因此跨步为5 * 4
=20。这占中倒数第二个值
strides。
从另一处开始
1,要到达
3(即
blocks[0,1,0,0]),便是2(即
bw)项,因此步幅为2 * 4
=8。这占的第二个值
strides。
最后,从出发
1,到达
11(即
blocks[1,0,0,0])是10(即
w*bh)项,因此跨度为10 * 4 = 40
strides =(40,8,20,4)。



