首页 > 解决方案 > 将 NxN 矩阵中的值分组为 N/2 x N/2 矩阵

问题描述

假设我有以下 4x4 矩阵:

import numpy as np
np.array([[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9,10,11,12],
          [13,14,15,16]])

我希望将 2x2 子矩阵中的值分组,对它们求和并将结果收集到 2x2 矩阵中,这样在这种情况下的结果将是:

[
[14, 22],
[46, 54]
]

这样做的最麻木的方式是什么?

标签: pythonnumpy

解决方案


您可以使用.reshape方法,然后沿轴求和:

import numpy as np

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

bs = 2 #block size
data_r = data.reshape(bs,bs,bs,bs)
data_r
array([[[[ 1,  2],
         [ 3,  4]],
        [[ 5,  6],
         [ 7,  8]]],
       [[[ 9, 10],
         [11, 12]],
        [[13, 14],
         [15, 16]]]])

data_r.sum(axis=(1,3))
array([[14, 22],
       [46, 54]])

推荐阅读