2015-04-15 25 views
6

Ben NumPy paketini kullanarak Python dikey iki diziyi bitiştirmek istiyorum: Python'da iki diziyi dikey olarak birleştirmek nasıl?

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

Böyle bir şey istiyorum:

c = array([[1,2,3,4],[5,6,7,8]]) 

yapabileceğimiz Bu nasıl concatenate işlevini kullanarak? Bunları iki işlevi kontrol ancak sonuçlar aynı:, sen a ve b 2D diziler yerine yapmak gerekir

c = array([1,2,3,4,5,6,7,8]) 

cevap

8

Sorun, hem a hem de b'un 1D dizileridir ve bu nedenle bunları birleştirmek için yalnızca bir eksen vardır.

Bunun yerine, (dikey için v) vstack kullanabilirsiniz:

>>> np.row_stack((a,b)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

Ayrıca dikkati çekiyor:

>>> np.vstack((a,b)) 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

Ayrıca row_stackvstack fonksiyonunun bir diğer adıdır Aynı uzunluktaki çoklu diziler bir kerede istiflenebilir. Örneğin, np.vstack((a,b,x,y)) dört satır olabilir. her bir dizi, en az iki boyuta sahiptir emin birinci eksen (axis=0) bu diziler katılması için concatenate çağrı ardından (atleast_2D kullanılarak) ve örtünün altında

, vstack çalışır.

2

concatenate kullanmak için:

c = concatenate((a,b),axis=0) 
# or 
c = concatenate((a,b),axis=1) 

Biz bu fonksiyonların her ikisi de bu var 1D, Alternatif

c = concatenate((atleast_2d(a), atleast_2d(b))) 

yılında, sadece yapabileceği şekilde

c = array((a,b)) 
+0

Cevabınız için teşekkür ederiz. 'Array' kullanılarak yatay olarak nasıl birleşebiliriz? Sadece dikey olarak birleştirme için mi? – user2991243

+0

@ user2991243 Bağlanacak olan ekseni kontrol etmek için 'axis' parametresini kullanabilirsiniz ve varsayılan değer' 0' olarak işaretlenir. –

2

Kullanım np.vstack:

In [4]: 

import numpy as np 
a = np.array([1,2,3,4]) 
b = np.array([5,6,7,8]) 
c = np.vstack((a,b)) 
c 
Out[4]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 

In [5]: 

d = np.array ([[1,2,3,4],[5,6,7,8]]) 
d 
​ 
Out[5]: 
array([[1, 2, 3, 4], 
     [5, 6, 7, 8]]) 
In [6]: 

np.equal(c,d) 
Out[6]: 
array([[ True, True, True, True], 
     [ True, True, True, True]], dtype=bool) 
3

Bence de iyi bir çözüm değil, ama basit yoludur kodunuzu, sadece eklemek işleri yapar yenidenbiçimleme:

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

c = concatenate((a,b),axis=0).reshape((2,4)) 

print c 

üzerinden:

[[1 2 3 4] 
[5 6 7 8]] 

Genelde aynı uzunlukta 2'den fazla diziniz varsa:

reshape((number_of_arrays, length_of_array)) 
İlgili konular