【问题标题】:Reshape numpy array in z axis在 z 轴上重塑 numpy 数组
【发布时间】:2018-07-16 04:02:39
【问题描述】:

我有一个这样的数据集

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

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

【问题讨论】:

  • 你看过 numpy 和 reshape 函数吗?
  • @busybear 是的,我有,但我不知道该怎么做。
  • 将该数组重塑为 (3,2,2) 并将其索引为 [:, 0, 0] 不会给出 [1, 2, 3]
  • a.reshape(3,2,2,order='F')[:, 0, 0] 为我返回 [1,2,3]

标签: python numpy


【解决方案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]])

使用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])

【讨论】:

    【解决方案2】:
    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])
    

    由于您想将前 3 个值保持“在一起”,我们可以从以下重塑开始:

    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])。

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2013-01-06
      • 2016-02-10
      • 2020-07-11
      • 1970-01-01
      • 2016-02-10
      相关资源
      最近更新 更多