2013-07-12 7 views
11

Ho due array NumPy:Come si combinano due elementi di array numpy wise in python?

A = np.array([1, 3, 5, 7]) 
B = np.array([2, 4, 6, 8]) 

e voglio ottenere il seguente dalla combinazione dei due:

C = [1, 2, 3, 4, 5, 6, 7, 8] 

Sono in grado di ottenere qualcosa di simile utilizzando zip, ma non è proprio quello Sto cercando:

>>> zip(A, B) 
[(1, 2), (3, 4), (5, 6), (7, 8)] 

Come faccio a combinare i due elementi di array numpy saggi?


Ho eseguito un test rapido di 50.000 elementi in ogni matrice (100.000 elementi combinati). Ecco i risultati:

User Ma3x:  Time of execution: 0.0343832323429  Valid Array?: True 
User mishik: Time of execution: 0.0439064509613  Valid Array?: True 
User Jaime:  Time of execution: 0.02767023558  Valid Array?: True 

Testato con Python 2.7, Windows 7 Enterprise a 64 bit, Intel Core i7 2720QM @ 2,2 Ghz Sandy Bridge, 8 GB Mem

+0

Ecco [un link al codice ] (http://chat.stackexchange.com/rooms/116/conversation/testing-the-element -wise-array-combine) che ho usato per testare questo. – KronoS

risposta

9

Uso np.insert:

>>> A = np.array([1, 3, 5, 7]) 
>>> B = np.array([2, 4, 6, 8]) 
>>> np.insert(B, np.arange(len(A)), A) 
array([1, 2, 3, 4, 5, 6, 7, 8]) 
+1

per un 'array N-D' dovresti anche passare il parametro' axis' per indicare lungo quale asse vuoi inserire il nuovo array ... –

0

si può provare questo:

C = sorted(A.tolist() + B.tolist()) 
  1. A.tolist() produrrà [1, 3, 5, 7]
  2. B.tolist() volontà cedere [2, 4, 6, 8]
  3. A.tolist() + B.tolist()-[1, 3, 5, 7, 2, 4, 6, 8]
  4. sorted(...) - [1, 2, 3, 4, 5, 6, 7, 8]

Senza ordinamento:

C = [y for x in zip(A, B) for y in x] 
+1

Non voglio che gli elementi siano ordinati, poiché si tratta di campioni di dati che non sono in ordine di valore. La tua seconda opzione è stata utilizzata nei miei test. – KronoS

1

Alcune risposte hanno suggerito l'ordinamento, ma dal momento che si desidera combinare loro ordinamento elemento-saggio non raggiungerà lo stesso risultato.

Ecco un modo per farlo

C = [] 
for elem in zip(A, B): 
    C.extend(elem) 
5

È inoltre possibile utilizzare le fette:

C = np.empty((A.shape[0]*2), dtype=A.dtype) 
C[0::2] = A 
C[1::2] = B 
3
>>> import numpy as np 
>>> A=np.array([1,3,5,7]) 
>>> B=np.array([2,4,6,8]) 
>>> C=np.dstack([A,B]) 
>>> D=C.reshape((1,8))[0] 
>>> D 
array([1, 2, 3, 4, 5, 6, 7, 8]) 
+2

Una breve descrizione sarebbe carina. Grazie. –

+0

Un paio di variazioni su questo: 'np.dstack ([A, B]). Flatten()', e 'np.array ([A, B]). T.flatten()' – hpaulj

+0

I tempi di risposta a 267 noi, rispetto a 8,59 ms per il metodo di inserimento Jamie (un aumento di velocità 300x). – hpaulj

Problemi correlati