所以说我有一个像这样的数组:
[
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
]
我试图将每2个数组堆叠在一起,所以最终得到以下结果:
[
[[1, 2, 3], [1, 2, 3]],
[[1, 2, 3], [1, 2, 3]],
]
对于这一点尤其重要的是,要使其尽可能高效,因为它将在不太强大的硬件上运行,因此我宁愿这样做而不循环遍历数组。有没有一种方法可以在numpy中实现而不使用循环?预先谢谢你。
答案 0 :(得分:3)
假设您的第一个维度是偶数(2的倍数),则可以使用reshape
将2D数组转换为3D数组,如下所示。这里唯一的事情是使用第一个维度为int(x/2)
,其中x
是二维数组的第一个维度,第二个维度为2。重要的是转换为int
因为shape参数必须是整数类型。
arr_old = np.array([
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
[1, 2, 3],
])
x, y = arr_old.shape # The shape of this input array is (4, 3)
arr_new = arr_old.reshape(int(x/2), 2, y) # Reshape the old array
print (arr_new.shape)
# (2, 2, 3)
print (arr_new)
# [[[1 2 3]
# [1 2 3]]
# [[1 2 3]
# [1 2 3]]]
@orli在评论中指出,您也可以
arr_old.shape = (x//2, 2, y)