numpy 如何水平堆叠数组?

cqoc49vn  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(112)

我有一个数组:

> a
array([[[1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12],
        [13, 14, 15, 16]],
       [[17, 18, 19, 20], 
        [21, 22, 23, 24], 
        [25, 26, 27, 28], 
        [29, 30, 31, 32]]])

我如何将其重塑为:

[[1, 2, 3, 4, 17, 18, 19, 20],
 [5, 6, 7, 8, 21, 22, 23, 24],
 [9, 10, 11, 12, 25, 26, 27, 28],
 [13, 14, 15, 16, 29, 30, 31, 32]]

我尝试了reshape函数,但它返回如下:

[[1, 2, 3, 4, 5, 6, 7, 8],
 [9, 10, 11, 12, 13, 14, 15, 16],
 [17, 18, 19, 20, 21, 22, 23, 24],
 [25, 26, 27, 28, 29, 30, 31, 32]]

有什么解决办法吗?
非常感谢

zf9nrax1

zf9nrax11#

Numpy通过hstack方法内置了此功能

a = np.array([[[1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12],
        [13, 14, 15, 16]],
       [[17, 18, 19, 20], 
        [21, 22, 23, 24], 
        [25, 26, 27, 28], 
        [29, 30, 31, 32]]])

np.hstack(a)

# array([[ 1,  2,  3,  4, 17, 18, 19, 20],
#        [ 5,  6,  7,  8, 21, 22, 23, 24],
#        [ 9, 10, 11, 12, 25, 26, 27, 28],
#        [13, 14, 15, 16, 29, 30, 31, 32]])
tvmytwxo

tvmytwxo2#

您可以使用moveaxis将第一个轴推到最后,然后按Fortran顺序使用reshape

np.moveaxis(a, 0, -1).reshape((a.shape[1], -1), order='F')

输出量:

array([[ 1,  2,  3,  4, 17, 18, 19, 20],
       [ 5,  6,  7,  8, 21, 22, 23, 24],
       [ 9, 10, 11, 12, 25, 26, 27, 28],
       [13, 14, 15, 16, 29, 30, 31, 32]])
klr1opcd

klr1opcd3#

可以使用np.c_

np.c_[a[0], a[1]]

# [[ 1  2  3  4 17 18 19 20]
#  [ 5  6  7  8 21 22 23 24]
#  [ 9 10 11 12 25 26 27 28]
#  [13 14 15 16 29 30 31 32]]

相关问题