Numpy - 重塑并将2D阵列分区为3D

Aux*_*ary 7 python arrays numpy reshape

有没有办法将2D阵列分区并重塑为3D阵列.如下例所示:

在此输入图像描述

基本上,我左边有一个4x4矩阵,我想要一个2x2x4矩阵,所以我可以在第3轴上应用numpy.mean.实际上我拥有的矩阵非常庞大,所以这就是为什么循环使用块不是一种选择.

任何帮助是极大的赞赏.

Saj*_*ngh 4

对于您的示例,您可以使用numpy.lib.stride_tricks.as_strided

In [1]: A = np.arange(16).reshape(4, 4)

In [2]: A
Out[2]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [3]: strides = A.itemsize * np.array([8, 2, 4, 1])

In [4]: x = p.lib.stride_tricks.as_strided(A, shape = (2, 2, 2, 2), strides = strides)

In [4]: x
Out[4]:
array([[[[ 0,  1],
         [ 4,  5]],

        [[ 2,  3],
         [ 6,  7]]],


       [[[ 4,  5],
         [ 8,  9]],

        [[ 6,  7],
         [10, 11]]]])

In [5]: x.reshape(4, 2, 2)
Out[5]:
array([[[ 0,  1],
        [ 4,  5]],

       [[ 2,  3],
        [ 6,  7]],

       [[ 8,  9],
        [12, 13]],

       [[10, 11],
        [14, 15]]])
Run Code Online (Sandbox Code Playgroud)

步幅定义了遍历数组时使用的字节偏移量,并且该as_strided函数使您能够使用用户定义的步幅构建新数组。

但是,我不知道它的效率如何以及它对您的使用的扩展程度如何。