2013-07-12 2 views
11

У меня есть два массива: NumpyКак объединить два элемента массива numpy в python?

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

, и я хочу, чтобы получить следующие из комбинируя два:

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

Я могу получить что-то близкое с помощью zip, но не совсем то, что Я ищу:

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

Как объединить два элемента массива numpy мудрый?


Я проверил быструю проверку 50 000 элементов в каждом массиве (100 000 комбинированных элементов). Вот результаты:

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 

Испытано с помощью Python 2.7, Windows 7 Enterprise 64-разрядный процессор Intel Core i7 2720QM @ 2,2 ГГц Sandy Bridge, 8 GB Mem

+0

Вот [ссылка на код ] (http://chat.stackexchange.com/rooms/116/conversation/testing-the-element -wise-array-comb), который я использовал для проверки этого. – KronoS

ответ

9

Использование 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

для массива «N-D» вы также должны передать параметр «axis», чтобы указать, по какой оси вы хотите вставить новый массив ... –

0

Вы можете попробовать это:

C = sorted(A.tolist() + B.tolist()) 
  1. A.tolist() даст [1, 3, 5, 7]
  2. B.tolist() волю выход [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]

Без сортировки:

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

Я не хочу, чтобы элементы сортировались, так как они фактически являются образцами данных, которые не имеют значения. Второй вариант был использован в моем тестировании. – KronoS

1

Некоторые ответы предложили сортировки, но так как вы хотите, чтобы объединить их поэлементное сортировкой не достигнет тот же результат.

Вот один из способов сделать это

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

Вы также можете использовать ломтики:

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

Краткое описание было бы неплохо. Благодарю. –

+0

Несколько вариантов этого: 'np.dstack ([A, B]). Flatten()' и 'np.array ([A, B]). T.flatten()' – hpaulj

+0

Ваше время ответа на 267 по сравнению с 8,59 мс для метода вставки Jamie (300-кратное ускорение). – hpaulj

Смежные вопросы