Hoe u twee 1d numpy-arrays zipt naar 2d numpy-arrays

Ik heb twee numpy 1d-arrays, bijvoorbeeld:

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

Hoe kan ik dan een 2d array [[1,6], [2,7], [3,8], [4,9], [5, 10]]krijgen?


Antwoord 1, autoriteit 100%

Als je numpy-arrays hebt, kun je 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)

Antwoord 2, autoriteit 36%

Het antwoord ligt in uw vraag:

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

Bewerken:

Hoewel mijn bericht het antwoord geeft zoals gevraagd door de OP, kost de conversie naar lijst en terug naar NumPy-array wat overhead (merkbaar voor grote arrays).

Daarom zou dstackeen rekenkundig efficiënt alternatief zijn (ref. @zipa’s antwoord). Ik was niet op de hoogte van dstackop het moment dat ik dit antwoord plaatste, dus dank aan @zipa voor de introductie ervan in dit bericht.

Bewerken 2:

Zoals te zien is in de dubbele vraag, np.c_is zelfs korter dan 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]])

Antwoord 3, autoriteit 3%

U kunt zip

. gebruiken

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

Other episodes