例如,我有一个4×5数组,我想从中获得4个2×2块.我很好,右边和下边缘的额外的细胞被排除.
到目前为止,我的代码是:
import sysimport numpy as npa = np.array([[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)strIDes = (w*sz,sz,w*sz,sz)blocks = np.lib.strIDe_tricks.as_strIDed(a,shape=shape,strIDes=strIDes)print blocks[0][0]assert blocks[0][0].toList() == [[1,2],7]]print blocks[0][1]assert blocks[0][1].toList() == [[3,4],[8,9]]print blocks[1][0]assert blocks[1][0].toList() == [[11,12],17]]
结果块数组的形状似乎是正确的,但最后两个断言失败,大概是因为我的形状或步幅参数不正确.我应该设置哪些值来获得不重叠的块?
解决方法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,2shape = (h/bh,bw)print(shape)# (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,strIDes=strIDes)print(blocks)# [[[[ 1 2]# [ 6 7]]# [[ 3 4]# [ 8 9]]]# [[[11 12]# [16 17]]# [[13 14]# [18 19]]]]
从1开始(即块[0,0]),到达2(即块[0,1])是一个项目.由于(在我的机器上)a.itemsize是4个字节,所以步幅是1 * 4 = 4.这给了我们strIDes =(10,5,1)* a.itemsize =(40,20,4).
从1开始,到达6(即块[0,1,是5(即w)项目,所以步幅是5 * 4 = 20.这占第二个最后价值大步.
从1开始,到达3(即块[0,是2(即bw)项目,所以步幅是2 * 4 = 8这是第二个价值大步
最后,从1开始,到达11(即块[1,是10(即w * bh)项,所以步幅是10 * 4 = 40.所以strIDes =( 40,4).
总结以上是内存溢出为你收集整理的python – 使用Numpy stride_tricks获取非重叠的数组块全部内容,希望文章能够帮你解决python – 使用Numpy stride_tricks获取非重叠的数组块所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)