Bir array’i yarattıktan sonra bir array’in shape(şekli) değiştirilebilir. Bu bölümde shape üzerine yapılan işlemler özetlenecektir.
03.01. Bir array’in shape’i değiştirme
3’e 4’lük bir array tanımlayalım, 0 ile 1 arasında rasgele bir sayı üretip 10 ile çarpalım. Ondalık kısmını almak içinde np.floor metodunu kullanalım. Sonuç:
1 2 3 |
a = np.floor(10*np.random.random((3,4))) print(a) print(a.shape) |
1 2 3 4 |
[[7. 9. 5. 2.] [7. 8. 7. 0.] [5. 5. 3. 7.]] (3, 4) |
Şimdi bu matrisi alıp boyutunu değiştirelim.
1 2 3 4 5 6 7 8 |
b = a.ravel() #tek boyutlu diziye çevirir print(b) c = b.reshape(6,2) #tek boyutlu diziyi, 6'ye 2'lik bir diziye çevirir. print(c) d = c.T #transpozesini bir array şeklinde döndürür print(d) print(d.shape) #transpoze şekli print(c.shape) #transpoze olmayan dizinin şekli |
1 2 3 4 5 6 7 8 9 10 11 |
[7. 9. 5. 2. 7. 8. 7. 0. 5. 5. 3. 7.] [[7. 9.] [5. 2.] [7. 8.] [7. 0.] [5. 5.] [3. 7.]] [[7. 5. 7. 7. 5. 3.] [9. 2. 8. 0. 5. 7.]] (2, 6) (6, 2) |
reshape komutu ile direkt array üzerinde düzenlemeler yapılabilir. Örneğin,
1 2 3 4 5 |
a = np.array([[7., 9., 5., 2.], [7., 8., 7., 0.], [5., 5., 3., 7.]]) b = a.reshape((2,6)) print(b) c = a.reshape(3,-1) print(c) |
1 2 3 4 5 |
[[7. 9. 5. 2. 7. 8.] [7. 0. 5. 5. 3. 7.]] [[7. 9. 5. 2.] [7. 8. 7. 0.] [5. 5. 3. 7.]] |
03.02. Array birleştirme
Öncelikle iki array yaratalım ve bu iki array üzerine iki farklı birleştirme yapalım.
1 2 3 4 |
a = np.floor(10*np.random.random((2,2))) b = np.floor(10*np.random.random((2,2))) print(a) print(b) |
1 2 3 4 |
[[9. 5.] [4. 5.]] [[7. 2.] [6. 8.]] |
1 2 3 4 5 6 |
c = np.vstack((a,b)) print(c.shape) print(c) d = np.hstack((a,b)) print(d.shape) print(d) |
1 2 3 4 5 6 7 8 |
(4, 2) [[9. 5.] [4. 5.] [7. 2.] [6. 8.]] (2, 4) [[9. 5. 7. 2.] [4. 5. 6. 8.]] |
vstack dikey ve hstack yatay bir birleştirme yapar. 2×2’lik bir dizi vstack ile 4×2 ve hstack ile 2×4’lük diziye dönüştürülür.
column_stack fonksiyonu 2 boyutlu array’lerde hstack gibi çalışırken diğer matrislerde biraz daha farklı çalışır. Örneğin,
1 2 3 4 5 6 7 8 |
d = np.column_stack((a,b)) #hstack ile aynı print(d) a = np.array([4.,2.]) b = np.array([3.,8.]) #tek boyutlu iki dizi yapalım, sonuçları görelim c = np.column_stack((a,b)) print("columnstack: ", c) d = np.hstack((a,b)) print("hstack: ", d) |
1 2 3 4 5 |
[[9. 5. 7. 2.] [4. 5. 6. 8.]] columnstack: [[4. 3.] [2. 8.]] hstack: [4. 2. 3. 8.] |
newaxis ile tek boyutlu diziler iki boyutlu diziye çevrilebilir. Örneğin,
1 2 3 4 5 6 7 |
from numpy import newaxis a = a[:,newaxis] b = b[:,newaxis] c = np.column_stack((a,b)) print("a", a) print("b", b) print("c", c) |
1 2 3 4 5 6 |
a [[4.] [2.]] b [[3.] [8.]] c [[4. 3.] [2. 8.]] |
2 boyutlu olduğu için hstack fonksiyonu ile de aynı sonuç alınır. Ayrıca, birleştirme için concatenate komutunu kullanabilirsiniz.
03.02. Array bölme
hsplit ve vsplit fonksiyonları diziyi bölmek için kullanılabilir. hsplit’e basit bir örnek verelim:
1 2 3 4 |
a = np.floor(10*np.random.random((2,12))) print("a ",a) b = np.hsplit(a,3) print("b ", b) |
1 2 3 4 5 6 |
a [[0. 6. 9. 0. 3. 1. 4. 2. 1. 7. 6. 9.] [7. 6. 3. 6. 9. 3. 2. 2. 7. 1. 4. 5.]] b [array([[0., 6., 9., 0.], [7., 6., 3., 6.]]), array([[3., 1., 4., 2.], [9., 3., 2., 2.]]), array([[1., 7., 6., 9.], [7., 1., 4., 5.]])] |
h yatay ve v dikey bir bölme yaptığını gösterir. Ayrıca, array_split fonksiyonu bölme için kullanabilirsiniz.