在Z轴上重塑numpy数组

时间:2018-07-16 04:02:39

标签: python numpy

我有一个这样的数据集

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

如何将其重塑为(3,2,2)的形状,以便a[:,0,0] = [1,2,3]

2 个答案:

答案 0 :(得分:1)

您可以使用两个步骤: 第一步。

In [28]: b1 = np.reshape(a,(3,4), order='F')

In [29]: b1
Out[29]:
array([[ 1,  4,  7, 10],
       [ 2,  5,  8, 11],
       [ 3,  6,  9, 12]])

use order='F'表示使用类似Fortran的索引顺序读取/写入元素,第一个索引更改最快,最后一个索引更改最慢。 numpy.reshape

setp2

In [30]: c = b1.reshape(3,2,2)

In [31]: c
Out[31]:
array([[[ 1,  4],
        [ 7, 10]],

       [[ 2,  5],
        [ 8, 11]],

       [[ 3,  6],
        [ 9, 12]]])

获得最终结果:

In [34]: c[:,0,0]
Out[34]: array([1, 2, 3])

答案 1 :(得分:0)

In [30]: a=np.arange(1,13)
In [31]: a
Out[31]: array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])

由于您希望将“前三个”值保持在一起,因此我们可以从以下调整开始:

In [32]: a.reshape(2,2,3)
Out[32]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

然后交换几个轴:

In [33]: a.reshape(2,2,3).transpose(2,0,1)
Out[33]: 
array([[[ 1,  4],
        [ 7, 10]],

       [[ 2,  5],
        [ 8, 11]],

       [[ 3,  6],
        [ 9, 12]]])
In [34]: _[:,0,0]
Out[34]: array([1, 2, 3])

或使用其他移调:

In [35]: a.reshape(2,2,3).transpose(2,1,0)
Out[35]: 
array([[[ 1,  7],
        [ 4, 10]],

       [[ 2,  8],
        [ 5, 11]],

       [[ 3,  9],
        [ 6, 12]]])

transpose()带有参数(也用.T调用)做同样的事情。

所以你的问题有点模棱两可。

另一个答案中提到的order F重塑也是如此:

In [37]: a.reshape(3,2,2, order='F')
Out[37]: 
array([[[ 1,  7],
        [ 4, 10]],

       [[ 2,  8],
        [ 5, 11]],

       [[ 3,  9],
        [ 6, 12]]])

(尽管经过了两步,a.reshape(3,4, order='F').reshape(3,2,2)产生了我的第一个结果Out[33])。