在Python中计算较大3D数组中子数组的平均值

时间:2015-02-20 13:58:53

标签: python arrays numpy mean

我有一个像这样的3D数组:

 a = ([[[25,  4, 54], [58, 14, 27], [35, 40, 62], [53, 72, 86], [87,  4, 51], [89, 34, 22]],
       [[61, 99, 89], [52, 93, 18], [ 0, 38, 12], [99, 10, 98], [79, 91, 75], [31, 59,  3]],
       [[22,  9, 63], [37, 26,  3], [54, 40, 39], [36, 87, 44], [81, 10,  7], [75, 29, 20]],
       [[55, 30, 44], [21, 36, 98], [56, 52, 78], [80, 76, 32], [72, 26, 17], [15, 81, 37]],
       [[73, 37, 28], [30, 44, 75], [66, 59, 61], [34, 57, 56], [13, 51, 73], [20, 51, 94]],
       [[86, 38, 69], [85, 74, 91], [25, 90, 58], [50, 12, 79], [24, 96, 28], [73,  2, 17]]])

我试图计算每个后续的4个元素的平均值 随后,整个矩阵中的行和列按顺序排列 具有小方块意味着大矩阵的样本。我期待 有一个结果整数矩阵,如:

 ([[[49, 52, 47], [47, 40, 64],

......等等......

我尝试使用切片步骤,然后使用像

这样的平均功能
a[::2].mean()

但它不会返回我期望的结果。

到目前为止,我能得到的是使用

的列或行的平均值
numpy.mean(a, axis=0 or 1)

但这对我没用,因为它会返回整个列或 行均值而不是矩阵中4个元素的平均值。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

我假设您要计算条目(0,0),(0,1),(1,0),(1,1),然后是(2,2)的平均值,(2, 3),(3,2),(3,3)等。

您可以分别从索引(0,0),(0,1),(1,0)和(1,1)开始选择每隔一列和每行四次。然后,除以4并舍入结果:

np.round((a[::2,::2] + a[1::2,::2] + a[::2,1::2] + a[1::2,1::2]) / 4.0)

这会给你

array([[[ 49.,  52.,  47.],
        [ 47.,  40.,  64.],
        [ 72.,  47.,  38.]],

       [[ 34.,  25.,  52.],
        [ 56.,  64.,  48.],
        [ 61.,  36.,  20.]],

       [[ 68.,  48.,  66.],
        [ 44.,  54.,  64.],
        [ 32.,  50.,  53.]]])