您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

5b51 2022/1/14 8:22:59 python 字数 2176 阅读 549 来源 www.jb51.cc/python

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

概述

例如,我有一个4×5数组,我想从中获得4个2×2块.我很好,右边和下边缘的额外的细胞被排除.

到目前为止,我的代码是:

import sys
import numpy as np

a = np.array([
[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],])

sz = a.itemsize
h,w = a.shape
bh,bw = 2,2

shape = (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 np
n=4
m=5
a = 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.itemsize
h,2
shape = (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获取非重叠的数组块所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶