How to zip two 1d numpy array to 2d numpy array

Question:

I have two numpy 1d arrays, e.g:

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

Then how can I get one 2d array `[[1,6], [2,7], [3,8], [4,9], [5, 10]]`?

Answers:

The answer lies in your question:

``````np.array(list(zip(a,b)))
``````

Edit:

Although my post gives the answer as requested by the OP, the conversion to list and back to NumPy array takes some overhead (noticeable for large arrays).

Hence, `dstack` would be a computationally efficient alternative (ref. @zipa’s answer). I was unaware of `dstack` at the time of posting this answer so credits to @zipa for introducing it to this post.

Edit 2:

As can be seen in the duplicate question, `np.c_` is even shorter than `np.dstack`.

``````>>> 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]])
``````

You can use `zip`

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

If you have numpy arrays you can use `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)
``````
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.