栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何对numpy数组的2x2子数组的平均值进行矢量化处理?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何对numpy数组的2x2子数组的平均值进行矢量化处理?

如果我们形成整形矩阵

y = x.reshape(2,2,3,2)
,则(i,j)2x2子矩阵由给出
y[i,:,j,:]
。例如:

In [340]: xOut[340]: array([[  0.,   1.,   2.,   3.,   4.,   5.],       [  6.,   7.,   8.,   9.,  10.,  11.],       [ 12.,  13.,  14.,  15.,  16.,  17.],       [ 18.,  19.,  20.,  21.,  22.,  23.]])In [341]: y = x.reshape(2,2,3,2)In [342]: y[0,:,0,:]Out[342]: array([[ 0.,  1.],       [ 6.,  7.]])In [343]: y[1,:,2,:]Out[343]: array([[ 16.,  17.],       [ 22.,  23.]])

要获得2x2子矩阵的均值,请使用配合以下

mean
方法
axis=(1,3)

In [344]: y.mean(axis=(1,3))Out[344]: array([[  3.5,   5.5,   7.5],       [ 15.5,  17.5,  19.5]])

如果您使用的numpy较旧版本不支持在轴上使用元组,则可以执行以下操作:

In [345]: y.mean(axis=1).mean(axis=-1)Out[345]: array([[  3.5,   5.5,   7.5],       [ 15.5,  17.5,  19.5]])

请参阅@dashesy在评论中给出的链接,以获取有关重塑“技巧”的更多背景信息。


要将其推广为形状为(m,n)的二维数组,其中m和n为偶数,请使用

y = x.reshape(x.shape[0]/2, 2, x.shape[1], 2)

y
然后可以解释为2x2数组的数组。4-d阵列的第一和第三索引槽用作选择2x2块之一的索引。要获得左上2x2块,请使用
y[0, :, 0,:]
;到第二行和第三列的块中,使用
y[1, :, 2, :]
;通常,要访问块(j,k),请使用
y[j, :, k, :]

要计算这些块的均值的简化数组,请使用的

mean
方法
axis=(1, 3)
(即,第1轴和第3轴的平均值):

avg = y.mean(axis=(1, 3))

这是一个

x
形状为(8,10)的示例,因此2x2块的平均值数组的形状为(4,5):

In [10]: np.random.seed(123)In [11]: x = np.random.randint(0, 4, size=(8, 10))In [12]: xOut[12]: array([[2, 1, 2, 2, 0, 2, 2, 1, 3, 2],       [3, 1, 2, 1, 0, 1, 2, 3, 1, 0],       [2, 0, 3, 1, 3, 2, 1, 0, 0, 0],       [0, 1, 3, 3, 2, 0, 3, 2, 0, 3],       [0, 1, 0, 3, 1, 3, 0, 0, 0, 2],       [1, 1, 2, 2, 3, 2, 1, 0, 0, 3],       [2, 1, 0, 3, 2, 2, 2, 2, 1, 2],       [0, 3, 3, 3, 1, 0, 2, 0, 2, 1]])In [13]: y = x.reshape(x.shape[0]/2, 2, x.shape[1]/2, 2)

看一下两个2x2块:

In [14]: y[0, :, 0, :]Out[14]: array([[2, 1],       [3, 1]])In [15]: y[1, :, 2, :]Out[15]: array([[3, 2],       [2, 0]])

计算块的平均值:

In [16]: avg = y.mean(axis=(1, 3))In [17]: avgOut[17]: array([[ 1.75,  1.75,  0.75,  2.  ,  1.5 ],       [ 0.75,  2.5 ,  1.75,  1.5 ,  0.75],       [ 0.75,  1.75,  2.25,  0.25,  1.25],       [ 1.5 ,  2.25,  1.25,  1.5 ,  1.5 ]])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/625421.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号