python – 使用Numpy stride_tricks获取非重叠的数组块

python – 使用Numpy stride_tricks获取非重叠的数组块,第1张

概述我试图使用numpy.lib.stride_tricks.as_striding来迭代数组的非重叠块,但是我无法找到参数的文档,所以我只能得到重叠的块. 例如,我有一个4×5数组,我想从中获得4个2×2块.我很好,右边和下边缘的额外的细胞被排除. 到目前为止,我的代码是: import sysimport numpy as npa = np.array([[1,2,3,4,5],[6,7 我试图使用numpy.lib.strIDe_tricks.as_strIDing来迭代数组的非重叠块,但是我无法找到参数的文档,所以我只能得到重叠的块.

例如,我有一个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获取非重叠的数组块所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1207200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存