繁体   English   中英

在 numpy 3d 数组中堆叠第三维的每两个元素

[英]Stack every two elements of the third dimension in a numpy 3d array

我有一个形状为(294、62、350)的 numpy 数组。 沿着第三维(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]]])

预期的 output 将是:

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 的新手,我不知道如何解决这个问题,因此我没有“我自己的尝试”来包括这里。

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

您可以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]

output:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM