如何将两个1d numpy数组压缩为2d numpy数组

zjf*_*fdu 26 python numpy

我有两个numpy 1d数组,例如:

a = np.array([1,2,3,4,5])
b = np.array([6,7,8,9,10])
Run Code Online (Sandbox Code Playgroud)

那我怎么能得到一个2d阵列[[1,6], [2,7], [3,8], [4,9], [5, 10]]

zip*_*ipa 71

如果你有numpy数组,你可以使用dstack():

import numpy as np

a = np.array([1,2,3,4,5])
b = np.array([6,7,8,9,10])

c = np.dstack((a,b))
#or
d = np.column_stack((a,b))

>>> c
array([[[ 1,  6],
        [ 2,  7],
        [ 3,  8],
        [ 4,  9],
        [ 5, 10]]])
>>> d
array([[ 1,  6],
       [ 2,  7],
       [ 3,  8],
       [ 4,  9],
       [ 5, 10]])

>>> c.shape
(1, 5, 2)
>>> d.shape
(5, 2)
Run Code Online (Sandbox Code Playgroud)

  • 请注意 - `np.dstack` 在第三维中堆叠数组。因此,您将创建一个不必要的维度。`np.column_stack` 或 `np.stack(...,axis=-1)` 都更合适。 (12认同)
  • 或者,`np.stack((a,b),axis = -1)`,但你的方式更紧凑. (4认同)
  • FWIW,`np.column_stack` 似乎是执行此操作的最快方法,有关详细信息,请参阅我对该问题的评论。 (4认同)
  • 为什么“axis=-1”而不是“+1”? (2认同)

Ébe*_*aac 23

答案在于你的问题:

np.array(list(zip(a,b)))
Run Code Online (Sandbox Code Playgroud)


编辑:

尽管我的帖子提供了OP请求的答案,但转换到列表并返回NumPy数组需要一些开销(对于大型数组而言是显而易见的).

因此,dstack这将是一个计算上有效的替代方案(参考@ zipa的答案).我dstack在发布这个答案的时候并没有意识到@zipa将这篇文章介绍给这篇文章.

  • 为什么在使用Numpy数组时使用普通的Python函数来执行此操作? (3认同)