【问题标题】:Stack every two elements of the third dimension in a numpy 3d array将第三维的每两个元素堆叠在一个 numpy 3d 数组中
【发布时间】:2023-03-30 08:40:01
【问题描述】:

我有一个 numpy 形状的数组 (294, 62, 350)。沿着第三维(350),我需要将每两列组合成一个较长的列,这将产生一个形状数组(294、124、175)。例如,如果我有这个数组:

a_3d_array = np.array([[[1, 2, 3, 6, 1, 2], [3, 4, 3, 6, 1, 4]],
                      [[5, 2, 2, 1, 4, 2], [2, 9, 4, 3, 2, 7]]])

预期的输出是:

expected_output = np.array([[[5, 2, 4], [2, 4, 2], [ 2, 1, 2], [9, 3, 7]],
                          [[1, 3, 1], [3, 3, 1], [2, 6, 2], [4, 6, 4]]])

抱歉,我是 python 新手,我不知道如何处理这个问题,因此我没有“我自己的尝试”来包括这里。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    您可以reshape 并反转第一个维度:

    a_3d_array.reshape((2,4,3), order='F')[::-1]
    

    如果你不知道形状:

    x,y,z = a_3d_array.shape
    a_3d_array.reshape((x,y*2,-1), order='F')[::-1]
    

    输出:

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

    【讨论】:

    • 谢谢,但这似乎并不能推广到有更多维度的现实生活案例。例如,如果我将您的解决方案应用于:a_3d_array = np.array([[[1, 2, 3, 6, 1, 2], [3, 4, 3, 6, 1, 4]], [[24, 22, 31, 26, 11, 22], [23, 24, 23, 26, 21, 24]], [[5, 2, 2, 1, 4, 2], [2, 9, 4, 3, 2, 7]]]) 那么我得到一个错误...
    • @steve 你没有提到泛化到更多的维度,尽管这是完全可行的。鉴于您给出的描述很少,NB 否决答案似乎是不公平的......顺便说一句,另一个答案也不能概括为任意步长(我的)。
    • 我的回答确实有效作为评论提供的示例......你只需要使用我给出的第二个代码......
    • 好的,看起来不错,我会尽可能地支持它。感谢您的帮助。
    【解决方案2】:
    a_3d_array = np.array([[[1, 2, 3, 6, 1, 2], [3, 4, 3, 6, 1, 4]],
                         [[5, 2, 2, 1, 4, 2], [2, 9, 4, 3, 2, 7]]])
    output = np.hstack([a_3d_array[:, :, ::2], a_3d_array[:, :, 1::2]])
    

    要合并每第 N 列:

    N = 3
    output = np.hstack([an_array[:, :, idx::N] for idx in range(N)])
    

    【讨论】:

    • 嘿,谢谢!这似乎可行,如果您想组合每 3 列而不是每秒,那么解决方案是:output = np.hstack([a_3d_array[:, :, ::3], a_3d_array[:, :, 1::3]])?
    • @stevezissou 一点也不。我编辑了答案,希望这是你想要的
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多