2013-07-12 13 views
11

Tôi có hai mảng NumPy:Làm thế nào để kết hợp hai phần tử mảng numpy khôn ngoan trong python?

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

và tôi muốn để có được những điều sau đây từ cách kết hợp hai:

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

Tôi có thể có được một cái gì đó gần bằng zip, nhưng không khá gì Tôi đang tìm kiếm:

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

Làm cách nào để kết hợp hai yếu tố mảng gọn gàng khôn ngoan?


Tôi đã kiểm tra nhanh 50.000 phần tử trong mỗi mảng (100.000 yếu tố kết hợp). Dưới đây là kết quả:

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 

Tested sử dụng Python 2.7, Windows 7 Enterprise 64-bit, Intel Core i7 2720QM @ 2.2 Ghz Sandy Bridge, 8 GB Mem

+0

Dưới đây là [một liên kết đến mã ] (http://chat.stackexchange.com/rooms/116/conversation/testing-the-element -kết-array-kết hợp) mà tôi đã sử dụng để kiểm tra điều này. – KronoS

Trả lời

9

Sử dụng 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

cho mảng 'N-D', bạn cũng nên chuyển tham số' trục' để chỉ ra dọc theo trục nào bạn muốn chèn mảng mới ... –

0

Bạn có thể thử này:

C = sorted(A.tolist() + B.tolist()) 
  1. A.tolist() sẽ mang lại [1, 3, 5, 7]
  2. B.tolist() chí mang lại [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]

Nếu không sắp xếp:

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

Tôi không muốn các yếu tố được sắp xếp, vì đây thực sự là các mẫu dữ liệu không theo thứ tự giá trị. Lựa chọn thứ hai của bạn đã được sử dụng trong thử nghiệm của tôi. – KronoS

1

Một số câu trả lời gợi ý phân loại, nhưng kể từ khi bạn muốn kết hợp chúng phân loại yếu tố khôn ngoan sẽ không đạt được cùng một kết quả.

Dưới đây là một cách để làm điều đó

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

Bạn cũng có thể sử dụng lát:

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

Mô tả ngắn gọn sẽ đẹp. Cảm ơn. –

+0

Một vài biến thể về điều này: 'np.dstack ([A, B]). Flatten()', và 'np.array ([A, B]) T.flatten()' – hpaulj

+0

Thời gian trả lời của bạn tại 267 chúng tôi, so với 8,59 ms cho phương pháp chèn Jamie (tăng tốc 300x). – hpaulj