【问题标题】:I want to convert a 2D numpy array to a 3D array, but there's a catch [duplicate]我想将 2D numpy 数组转换为 3D 数组,但有一个问题 [重复]
【发布时间】:2021-10-25 13:20:15
【问题描述】:

我将使用形状为 (4,4) 的简单二维数组作为示例:

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

并将其可视化:

我想将其转换为 3D 数组,以便沿 z 轴复制值,如下所示:

使生成的数组具有形状 (4,4,3)

看起来很简单,但我似乎想不出任何方法来做到这一点。

编辑:我从下面的答案中尝试了np.tile,但是我希望输出是这样的:

array([[[0, 0, 0],
    [2, 2, 2],
    [6, 6, 6],
    [3, 3, 3]],

   [[3, 3, 3],
    [7, 7, 7],
    [3, 3, 3],
    [9, 9, 9]],

   [[0, 0, 0],
    [8, 8, 8],
    [3, 3, 3],
    [4, 4, 4]],

   [[4, 4, 4],
    [6, 6, 6],
    [2, 2, 2],
    [1, 1, 1]]])

我尝试更改复制和重塑哪个轴,但它不起作用。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以为此使用numpy.tile

    >>> import numpy as np
    >>> data = np.array([[0, 2, 6, 3],
                         [3, 7, 3, 9],
                         [0, 8, 3, 4],
                         [4, 6, 2, 1]])
    >>> np.tile(data, (3,1,1))
    array([[[0, 2, 6, 3],
            [3, 7, 3, 9],
            [0, 8, 3, 4],
            [4, 6, 2, 1]],
    
           [[0, 2, 6, 3],
            [3, 7, 3, 9],
            [0, 8, 3, 4],
            [4, 6, 2, 1]],
    
           [[0, 2, 6, 3],
            [3, 7, 3, 9],
            [0, 8, 3, 4],
            [4, 6, 2, 1]]])
    

    【讨论】:

      【解决方案2】:

      用 set repetitions = 3 试试这个:

      import numpy as np
      
      an_array = np.array([[0, 2, 6, 3],
         [3, 7, 3, 9],
         [0, 8, 3, 4],
         [4, 6, 2, 1]])
      
      repetitions = 3
      
      repeats_array = np.tile(an_array.T, (repetitions , 1, 1)).T
      

      输出:

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

      【讨论】:

      • 感谢您的回答,尽管它没有给我预期的结果。如果您仍然有空,请参阅我上面的编辑
      • @LinkAnJarad,我在线,我正在处理您的评论;))
      • @LinkAnJarad,我编辑此行repeats_array = np.tile(an_array, (repetitions, 1, 1)) 并为矩阵添加两次.T 并得到您想要的输出,这是您的答案吗?
      • 非常感谢,.T 与众不同,它非常接近我的预期输出。我做了一些重塑然后转置它,然后我得到了答案
      • @LinkAnJarad,欢迎,如果这对您有帮助,请upvoteaccept 回答
      猜你喜欢
      • 2021-12-29
      • 2011-05-19
      • 2019-10-31
      • 1970-01-01
      • 2017-07-26
      • 2017-07-27
      • 1970-01-01
      • 2016-06-01
      • 2015-12-26
      相关资源
      最近更新 更多