2013-07-12 22 views
11

Mam dwie tablice numpy:Jak połączyć dwa elementy numpy array mądry w python?

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

i chcę uzyskać następujące z połączenia dwóch:

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

jestem w stanie uzyskać coś podobnego za pomocą zip, ale nie całkiem to, czego Szukam:

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

Jak połączyć dwa elementy numpy array mądry?


Zrobiłem szybki test z 50 000 elementów w każdej macierzy (100 000 połączonych elementów). Oto wyniki:

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 

Testowane przy użyciu Python 2.7, Windows 7 Enterprise 64-bit, Intel Core i7 2720QM @ 2,2 Ghz Sandy Bridge, 8 GB Mem

+0

tutaj [link do kodu ] (http://chat.stackexchange.com/rooms/116/conversation/testing-the-element -wise-array-combine), którego użyłem do przetestowania tego. – KronoS

Odpowiedz

9

Zastosowanie 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

dla 'N-D array' powinieneś również przekazać parametr' axis', aby wskazać, wzdłuż której osi chcesz wstawić nową tablicę ... –

0

można spróbować to:

C = sorted(A.tolist() + B.tolist()) 
  1. A.tolist() przyniesie [1, 3, 5, 7]
  2. B.tolist() woli uzyskując [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]

Bez sortowania:

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

Nie chcę, aby elementy zostały posortowane, ponieważ są to faktycznie próbki danych, które nie są w kolejności wartości. Twoja druga opcja została wykorzystana w moich testach. – KronoS

1

Niektóre odpowiedzi sugerują, sortowania, ale skoro chcesz je połączyć element mądry sortowania nie osiągnie ten sam wynik.

Oto jeden sposób to zrobić

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

Można również użyć plasterki:

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

Krótki opis byłby miły. Dzięki. –

+0

Kilka wariacji na ten temat: 'np.dstack ([A, B]) .flatten()', i 'np.array ([A, B]) T.flatten()' – hpaulj

+0

Twoje czasy odpowiedzi w 267 nam, w porównaniu do 8,59 ms dla metody wstawiania Jamiego (przyspieszenie 300x). – hpaulj