【问题标题】:How to reshape 3d numpy table?如何重塑 3d numpy 表?
【发布时间】:2021-10-28 18:23:02
【问题描述】:

我有一个 shape=(2,3,4) 的 3d numpy 表,如下所示:

a = np.array([[[1., 2., 3., 4.],
        [1., 2., 3., 4.],
        [1., 2., 3., 4.]],

       [[5., 6., 7., 8.],
        [5., 6., 7., 8.],
        [5., 6., 7., 8.]]])

并且希望通过将每个维度中的列堆叠成二维矩阵中的新列的方式来重塑它。

1  5
1  5
1  5
2  6
2  6
2  6
3  7
3  7
3  7
4  8
4  8
4  8

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    给你:

    res = a.T.reshape((-1,2))
    

    输出:

    array([[1., 5.],
           [1., 5.],
           [1., 5.],
           [2., 6.],
           [2., 6.],
           [2., 6.],
           [3., 7.],
           [3., 7.],
           [3., 7.],
           [4., 8.],
           [4., 8.],
           [4., 8.]])
    

    【讨论】:

    • 如何访问第一列? res[:][0] 不起作用。第一列为 [1,1,1,2,2,2,3,3,3,4,4,4,4]
    • 你可以使用 res[:,0]
    • 非常感谢。这真的很有帮助。
    • 不客气。如果您愿意,可以将您的问题标记为已回答
    【解决方案2】:

    要重塑numpy 数组,请使用reshape 方法。

    基本上,它会在阵列被展平时查看阵列,并使用新的给定形状对其进行处理。然而,它确实首先迭代最后一个索引,即最内层的列表将被处理,然后是下一个,依此类推。

    所以np.array([1, 2, 3, 4, 5, 6]).reshape((3, 2))np.array([[1, 2, 3], [4, 5, 6]]).reshape((3, 2)) 都会给出[[1, 2], [3, 4], [5, 6]],因为这两个原始数组在展平时是相同的。

    您想要一个 (12, 2) 数组,或者如果您阅读 reshape 文档,您可以传递 (-1, 2) 并且 numpy 将计算另一个维度。

    因此,如果您按原样为数组指定新形状,它将开始使用第一个列表 x[0, 0] = [1, 2, 3, 4],它将变为 [[1, 2], [3, 4]],...这不是您想要的。

    但请注意,如果您先转置数组,那么您将在内部列表中拥有所需的项目(快速变化的索引):

    In : x.T
    Out: 
    array([[[1., 5.],
            [1., 5.],
            [1., 5.]],
    
           [[2., 6.],
            [2., 6.],
            [2., 6.]],
    
           [[3., 7.],
            [3., 7.],
            [3., 7.]],
    
           [[4., 8.],
            [4., 8.],
            [4., 8.]]])
    

    这几乎是您想要的,除了额外的维度。所以现在你可以重塑它并按照你想要的方式获得你的 (12, 2) 数组:

    In : x.T.reshape((-1, 2))
    Out: 
    array([[1., 5.],
           [1., 5.],
           [1., 5.],
           [2., 6.],
           [2., 6.],
           [2., 6.],
           [3., 7.],
           [3., 7.],
           [3., 7.],
           [4., 8.],
           [4., 8.],
           [4., 8.]])
    

    【讨论】:

      猜你喜欢
      • 2017-11-11
      • 2016-02-10
      • 2021-03-21
      • 2019-09-12
      • 2018-03-17
      • 2021-08-06
      • 2019-07-10
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多