使用无循环的numpy将每2个数组堆叠在2D数组中

时间:2019-02-16 02:11:31

标签: python python-3.x numpy scipy

所以说我有一个像这样的数组:

[
[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中实现而不使用循环?预先谢谢你。

1 个答案:

答案 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)