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

Calculate mean of sub arrays within a larger 3D array in Python

我有一个这样的 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()

但它并不是 return 我期望的结果。

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

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

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

最好的方法是什么?

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

您 select 每隔一列和一行,四次,分别从索引 (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.]]])