我有两个numpy 1d数组,例如:
a = np.array([1,2,3,4,5])
b = np.array([6,7,8,9,10])
那我怎么能得到一个2维数组 [[1,6], [2,7], [3,8], [4,9], [5, 10]]
呢?
如果你有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)
np.stack((a, b), axis=-1)
,但您的方法更简洁。 - PM 2Ringnp.column_stack
是实现这一功能最快的方法,有关详细信息请参见我的问题评论。 - PM 2Ringnp.dstack
会在第三个维度上堆叠数组,因此您将创建一个不必要的维度。np.column_stack
或np.stack(...,axis =-1)
更为适合。 - Ryan Maxis=-1
而不是 +1
? - Guimoute答案就在你的问题中:
np.array(list(zip(a,b)))
编辑:
尽管我的帖子按照OP的要求给出了答案,但将其转换为列表然后再转回NumPy数组会有一些开销(对于大型数组来说很明显)。
因此,dstack
将是计算效率更高的选择(参见@zipa的回答)。在发布此答案时,我不知道dstack
,所以感谢@zipa将其引入到这个帖子中。
编辑2:
>>> import numpy as np
>>> a = np.arange(1, 6)
>>> b = np.arange(6, 11)
>>>
>>> a
array([1, 2, 3, 4, 5])
>>> b
array([ 6, 7, 8, 9, 10])
>>> np.c_[a, b]
array([[ 1, 6],
[ 2, 7],
[ 3, 8],
[ 4, 9],
[ 5, 10]])
zip
。np.array(list(zip(a,b)))
array([[ 1, 6],
[ 2, 7],
[ 3, 8],
[ 4, 9],
[ 5, 10]])
zip
可能比调用 Numpy 函数更快,但是对于较长的数组,Numpy 函数要快得多,其中column_stack
在我的测试中是最快的。例如,对于长度为 1000 的数组,column_stack
比zip
快约 1000 倍。这是一些相关的timeit
代码。 - PM 2Ring