首页 > 解决方案 > 堆叠多个 2D 数组以生成 3D 数组

问题描述

我有 4 个 numpy 数组,每个数组的形状(5,5)。我想将它们堆叠起来,以便得到一个新的形状数组(5,5,4)。我尝试使用:

N = np.stack((a, b, c, d))

但是,由于我是使用 numpy 的新手,我无法理解为什么它给出的形状是 (4, 5, 5) 而不是 (5, 5, 4)。我应该使用另一种方法吗?dstack 工作但改变了我的数组,我认为它转置了它们。

例如 4 个数组

[[1,2]
 [3,4]]

[[1,2]
 [3,4]]

[[1,2]
 [3,4]]

[[1,2]
 [3,4]]

当堆叠我期待:

[[[1,2]
 [3,4]]

[[1,2]
 [3,4]]

[[1,2]
 [3,4]]

[[1,2]
 [3,4]]]

这与堆栈按预期工作,但会给出(4,2,2)而不是(2,2,4)的形状。据我了解,形状是(行、列、深度)我错了吗?

标签: pythonarraysnumpy

解决方案


我相信你可以连接数组,并重塑为 3D 数组:

l = [a,b,c,d]
np.concatenate(l).reshape(len(l), *a.shape)

或者,如果您想避免创建该列表并事先知道数组的数量:

np.concatenate((a,b,c,d)).reshape(4, *a.shape)

检查共享示例:

a = [[1, 2], [3, 4]]
d = c = b = a

np.concatenate((a,b,c,d)).reshape(4, *np.array(a).shape)
array([[[1, 2],
        [3, 4]],

       [[1, 2],
        [3, 4]],

       [[1, 2],
        [3, 4]],

       [[1, 2],
        [3, 4]]])

推荐阅读