将数据从2d转换为3d numpy数组

时间:2018-03-30 12:20:37

标签: python-2.7 numpy reshape

如果我有一个二维数组,如:

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

我想最终得到一个像3d阵列一样的数组:

array([[[0, 4, 8],
        [1, 5, 9]],

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

我应该如何重塑阵列以获得我想要的东西?

1 个答案:

答案 0 :(得分:2)

Reshape and permute axes -

In [11]: a  # Input array
Out[11]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [12]: a.reshape(-1,2,2).transpose(1,2,0)
Out[12]: 
array([[[ 0,  4,  8],
        [ 1,  5,  9]],

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

使用np.moveaxis -

np.moveaxis(a.reshape(-1,2,2), 0,-1)

对它进行推广并假设您希望沿第一轴的长度为no的一半。列 -

In [16]: m,n = a.shape

In [17]: a.reshape(m,-1,2).transpose(1,2,0)
Out[17]: 
array([[[ 0,  4,  8],
        [ 1,  5,  9]],

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

如果该长度应为2 -

In [15]: a.reshape(m,2,-1).transpose(1,2,0)
Out[15]: 
array([[[ 0,  4,  8],
        [ 1,  5,  9]],

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