NumPy İndeksleme ve Dilimleme
NumPy indeksleme ve dilimleme, NumPy dizileriyle çalışırken çok önemli ve kullanışlı iki işlemdir. Bu işlemler sayesinde, dizilerin istediğimiz bölümlerine veya elemanlarına kolayca ulaşabilir, değiştirebilir veya yeni diziler oluşturabiliriz. Şimdi bunların nasıl yapıldığına bakalım.
NumPy indeksleme, bir dizinin belirli bir elemanına veya alt kümesine erişmek için kullanılan bir yöntemdir. NumPy dizilerinin indeks numaraları 0’dan başlar ve dizinin boyutuna göre artar. Bir boyutlu dizilerde indeks numarası tek bir sayıdır ve dizinin sırasını belirtir. Örneğin, a = np.array([10, 20, 30, 40, 50]) dizisinde a[0] elemanı 10, a[4] elemanı 50’dir. İndeks numarası negatif de olabilir, bu durumda dizinin sonundan başa doğru sayılır. Örneğin, a[-1] elemanı 50, a[-3] elemanı 30’dur. Çok boyutlu dizilerde ise indeks numarası birden fazla sayıdan oluşur ve dizinin her boyutunu belirtir. Örneğin, b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) dizisinde b[0, 0] elemanı 1, b[1, 2] elemanı 6’dır. İndeks numaraları virgülle ayrılır ve sırasıyla satır, sütun veya düzlem numaralarını gösterir. İndeks numaraları negatif de olabilir, bu durumda da dizinin sonundan başa doğru sayılır. Örneğin, b[-1, -1] elemanı 9, b[-2, -3] elemanı 4’tür. NumPy dilimleme, bir dizinin belirli bir aralıktaki elemanlarına veya alt kümelerine erişmek için kullanılan bir yöntemdir. NumPy dilimleme işlemi, : işareti ile belirtilen başlangıç, bitiş ve adım değerlerini kullanır. Başlangıç değeri dahil, bitiş değeri hariçtir. Adım değeri ise aralıktaki elemanların kaçar kaçar atlanacağını belirtir. Örneğin, a = np.array([10, 20, 30, 40, 50]) dizisinde a[1:4] dilimi [20, 30, 40], a[0:5:2] dilimi [10, 30, 50] dizilerini verir. Dilimleme işlemi, çok boyutlu dizilerde de uygulanabilir. Örneğin, b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) dizisinde b[0:2, 1:3] dilimi [[2, 3], [5, 6]], b[:, ::-1] dilimi [[3, 2, 1], [6, 5, 4], [9, 8, 7]] dizilerini verir. NumPy indeksleme ve dilimleme işlemleri, dizilerin elemanlarına veya alt kümelerine erişmenin yanı sıra, dizileri değiştirmek veya yeni diziler oluşturmak için de kullanılabilir. Örneğin, a = np.array([10, 20, 30, 40, 50]) dizisinde a[0] = 100 yaparak ilk elemanı 100’e değiştirebilir, b = a[1:3] yaparak yeni bir dizi oluşturabiliriz. Ancak, dikkat etmemiz gereken bir nokta, dilimleme işlemi ile oluşturulan yeni dizilerin, orijinal dizinin bir kopyası değil, bir görünümü (view) olduğudur. Yani, yeni diziyi değiştirdiğimizde, orijinal diziyi de değiştirmiş oluruz. Örneğin, b[0] = 200 yaptığımızda, a dizisinin de [100, 200, 30, 40, 50] olarak değiştiğini görürüz. Eğer, orijinal diziyi değiştirmeden yeni bir dizi oluşturmak istiyorsak, copy() metodunu kullanabiliriz. Örneğin, c = a[1:3].copy() yaparak, c dizisini değiştirdiğimizde, a dizisinin değişmediğini görürüz. NumPy indeksleme ve dilimleme işlemleri, NumPy dizileriyle çalışırken çok önemli ve kullanışlı iki işlemdir. Bu işlemler sayesinde, dizilerin istediğimiz bölümlerine veya elemanlarına kolayca ulaşabilir, değiştirebilir veya yeni diziler oluşturabiliriz. 1. UYGULAMA NumPy dizilerinde dilimleme işlemlerini yapmak için aşağıdaki adımları takip edebilirsiniz: 1. Adım: Bir boyutlu NumPy dizisi oluşturun ve dilimleme işlemlerini uygulayın. Örneğin, a = np.array([1,2,3,4,5,6]) dizisinde ilk üç elemanı seçmek için a[:3] yazabilirsiniz. Bu size [1,2,3] dizisini verecektir. Son iki elemanı seçmek için a[-2:] yazabilirsiniz. Bu size [5,6] dizisini verecektir. İkişer atlayarak elemanları seçmek için a[::2] yazabilirsiniz. Bu size [1,3,5] dizisini verecektir. 2. Adım: İki boyutlu NumPy dizisi oluşturun ve dilimleme işlemlerini uygulayın. Örneğin, b = np.array([[1,2,3], [4,5,6], [7,8,9]]) dizisinde ilk iki satırı ve ilk iki sütunu seçmek için b[:2, :2] yazabilirsiniz. Bu size [[1,2], [4,5]] dizisini verecektir. Son satırı ve son sütunu seçmek için b[-1:, -1:] yazabilirsiniz. Bu size [[9]] dizisini verecektir. Her satırdan tek sütun seçmek için b[:, ::2] yazabilirsiniz. Bu size [[1,3], [4,6], [7,9]] dizisini verecektir. 3. Adım: Üç boyutlu NumPy dizisi oluşturun ve dilimleme işlemlerini uygulayın. Örneğin, c = np.array([[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]) dizisinde ilk küpü seçmek için c[0] yazabilirsiniz. Bu size [[1,2,3], [4,5,6]] dizisini verecektir. Son küpten son iki elemanı seçmek için c[-1, -1, -2:] yazabilirsiniz. Bu size [11,12] dizisini verecektir. Her küpten ortadaki elemanı seçmek için c[:, 1, 1] yazabilirsiniz. Bu size [5,11] dizisini verecektir. 2. UYGULAMA NumPy dizisinden dilimleme ile eleman seçme işlemi, belirli bir aralık veya adım boyutu ile dizinin bir kısmını veya tamamını almak için kullanılan bir yöntemdir. Bu işlem, dizinin başlangıç ve bitiş indekslerini belirterek veya iki nokta üst üste (:) sembolü kullanarak yapılabilir. Aşağıdaki işlem adımlarını takip ederek eleman seçimi yapınız. 1. Adım: 10 ile 30 arasında sayılardan oluşan bir NumPy dizisi oluşturmak için np.arange(10,30) fonksiyonunu kullanıyoruz. Bu fonksiyon, 10 dahil 30 hariç olmak üzere 1’er artan sayıları içeren bir dizi döndürür. Oluşturulan dizinin boyutu 20’dir. 2. Adım: Oluşturulan dizinin 0 ile 4 indeks numarası arasındaki elemanlara erişmek için x[0:4] veya x[:4] ifadesini kullanıyoruz. Bu ifade, dizinin 0 dahil 4 hariç olmak üzere ilk 4 elemanını alır. Bu elemanlar 10, 11, 12 ve 13’tür. 3. Adım: Oluşturulan dizinin 4 indeks numaralı elemanından son elemana kadar erişmek için x[4:] ifadesini kullanıyoruz. Bu ifade, dizinin 4 dahil son elemana kadar olan kısmını alır. Bu elemanlar 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ve 29’dur. 4. Adım: Oluşturulan dizinin 0 indeks numaralı elemanından başlayarak indeks numarası ikişer artarak 10 indeks numaralı elemana kadar erişmek için x[0:10:2] ifadesini kullanıyoruz. Bu ifade, dizinin 0 dahil 10 hariç olmak üzere her 2. elemanını alır. Bu elemanlar 10, 12, 14, 16 ve 18’dir.. 3. UYGULAMA NumPy, Python programlama dilinde sayısal hesaplamalar için kullanılan bir kütüphanedir. NumPy dizileri, aynı türdeki verileri depolayan çok boyutlu veri yapılarıdır. NumPy dizilerinde dilimleme, belirli bir aralıktaki dizi elemanlarını seçmek için kullanılan bir yöntemdir. Dilimleme işlemi için köşeli parantezler içinde satır ve sütun indekslerini belirtmek gerekir. Aşağıda verilen işlem adımlarını takip ederek dilimleme işlemini yapın. 1. Adım: İki boyutlu bir dizi oluşturunuz. y=np.random.randint(0,10,(4,4)) Bu adımda, 0 ile 10 arasında rastgele tam sayılar üreten np.random.randint fonksiyonunu kullanarak 4x4 boyutunda bir dizi oluşturuyoruz. Bu diziyi y değişkenine atıyoruz. Oluşturulan diziyi görmek için y yazıp çalıştırabilirsiniz. Örnek bir çıktı şöyle olabilir: y = [[2 8 6 9] [7 4 3 0] [5 1 9 2] [0 3 7 6]] 2. Adım: Oluşturulan dizinin ikinci satırının tüm sütunlarını seçme işlemini yapınız. y[1,:] Bu adımda, y dizisinin ikinci satırını seçmek için köşeli parantezler içinde 1 yazıyoruz. Bu, dizinin ikinci satırının indeksini belirtir. Dizilerde indeksleme sıfırdan başlar, yani ilk satırın indeksi 0, ikinci satırın indeksi 1, üçüncü satırın indeksi 2 ve dördüncü satırın indeksi 3’tür. Tüm sütunları seçmek için ise virgül koyup iki nokta üst üste işaretini yazıyoruz. Bu, sütun indeksinin başlangıç ve bitiş değerlerini belirtmez, yani tüm sütunları kapsar. Bu şekilde yazdığımızda, y[1,:] ifadesi y dizisinin ikinci satırının tüm sütunlarını seçer. Bu ifadeyi yazıp çalıştırdığımızda, örnek bir çıktı şöyle olabilir: y[1,:] = [7 4 3 0] 3. Adım: Oluşturulan dizinin ikinci sütununun tüm satırlarını seçme işlemini yapınız. y[:,1] Bu adımda, y dizisinin ikinci sütununu seçmek için köşeli parantezler içinde virgül koyup 1 yazıyoruz. Bu, dizinin ikinci sütununun indeksini belirtir. Dizilerde indeksleme sıfırdan başlar, yani ilk sütunun indeksi 0, ikinci sütunun indeksi 1, üçüncü sütunun indeksi 2 ve dördüncü sütunun indeksi 3’tür. Tüm satırları seçmek için ise iki nokta üst üste işaretini yazıyoruz. Bu, satır indeksinin başlangıç ve bitiş değerlerini belirtmez, yani tüm satırları kapsar. Bu şekilde yazdığımızda, y[:,1] ifadesi y dizisinin ikinci sütununun tüm satırlarını seçer. Bu ifadeyi yazıp çalıştırdığımızda, örnek bir çıktı şöyle olabilir: y[:,1] = [8 4 1 3] 4. Adım: Oluşturulan dizinin ilk iki satırı ile ilk üç sütununu seçme işlemini yapınız. y[0:2,0:3] Bu adımda, y dizisinin ilk iki satırını seçmek için köşeli parantezler içinde 0:2 yazıyoruz. Bu, satır indeksinin başlangıç ve bitiş değerlerini belirtir. Başlangıç değeri dahil, bitiş değeri hariçtir. Yani 0:2, 0 ve 1 indeksli satırları seçer. İlk üç sütunu seçmek için ise virgül koyup 0:3 yazıyoruz. Bu da, sütun indeksinin başlangıç ve bitiş değerlerini belirtir. Başlangıç değeri dahil, bitiş değeri hariçtir. Yani 0:3, 0, 1 ve 2 indeksli sütunları seçer. Bu şekilde yazdığımızda, y[0:2,0:3] ifadesi y dizisinin ilk iki satırı ile ilk üç sütununu seçer. Bu ifadeyi yazıp çalıştırdığımızda, örnek bir çıktı şöyle olabilir: y[0:2,0:3] = [[2 8 6] [7 4 3]] 5. Adım: Oluşturulan dizinin ilk iki sütununu seçme işlemini yapınız. y[:,0:2] Bu adımda, y dizisinin ilk iki sütununu seçmek için köşeli parantezler içinde virgül koyup 0:2 yazıyoruz. Bu, sütun indeksinin başlangıç ve bitiş değerlerini belirtir. Başlangıç değeri dahil, bitiş değeri hariçtir. Yani 0:2, 0 ve 1 indeksli sütunları seçer. Tüm satırları seçmek için ise iki nokta üst üste işaretini yazıyoruz. Bu, satır indeksinin başlangıç ve bitiş değerlerini belirtmez, yani tüm satırları kapsar. Bu şekilde yazdığımızda, y[:,0:2] ifadesi y dizisinin ilk iki sütununun tüm satırlarını seçer. Bu ifadeyi yazıp çalıştırdığımızda, örnek bir çıktı şöyle olabilir: y[:,0:2] = [[2 8] [7 4] [5 1] [0 3]] 6. Adım: Oluşturulan dizide 4 sayısından büyük değere sahip olan dizi elemanları için mantıksal seçim işlemini yapınız. y[y>4] Bu adımda, y dizisinde 4 sayısından büyük değere sahip olan dizi elemanlarını seçmek için köşeli parantezler içinde y>4 yazıyoruz. Bu, y dizisinin her bir elemanını 4 sayısı ile karşılaştırarak bir mantıksal değer döndürür. Eğer eleman 4’ten büyükse True, değilse False olur. Bu şekilde yazdığımızda, y[y>4] ifadesi y dizisinde 4’ten büyük olan elemanları bir dizi olarak döndürür. Bu ifadeyi yazıp çalıştırdığımızda, örnek bir çıktı şöyle olabilir: y[y>4] = [8 6 9 7 5 9 7 6] NumPy Yeniden Boyutlandırma NumPy, Python programlama dilinde bilimsel hesaplamalar için kullanılan bir kütüphanedir. NumPy dizisi, aynı türden verileri tutan çok boyutlu bir veri yapısıdır. NumPy dizilerinin boyutu, dizinin kaç eleman içerdiğini belirler. NumPy dizilerinin şekli ise, dizinin kaç boyutlu olduğunu ve her boyutta kaç eleman bulunduğunu gösterir. NumPy dizilerini yeniden boyutlandırmak, dizinin şeklini değiştirmek anlamına gelir. NumPy dizilerini yeniden boyutlandırmak için reshape fonksiyonu kullanılır. reshape fonksiyonu, bir NumPy dizisini ve yeni bir şekil parametresi alır. reshape fonksiyonu, dizinin elemanlarını yeni şekle uyacak şekilde yeniden düzenler ve yeni bir NumPy dizisi döndürür. reshape fonksiyonu, dizinin eleman sayısını değiştirmez, sadece dizinin boyutlarını değiştirir. reshape fonksiyonunun kullanımı için bir örnek verelim. Öncelikle, 12 elemanlı bir NumPy dizisi oluşturalım: python import numpy as np dizi = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) print(dizi) print(dizi.shape) Bu kodun çıktısı şöyle olacaktır: python [ 1 2 3 4 5 6 7 8 9 10 11 12] (12,) Görüldüğü gibi, dizi tek boyutlu bir NumPy dizisidir ve 12 eleman içerir. Şimdi, bu diziyi reshape fonksiyonu ile iki boyutlu bir NumPy dizisine dönüştürelim. reshape fonksiyonuna yeni bir şekil parametresi olarak (3, 4) verelim. Bu, diziyi 3 satır ve 4 sütundan oluşan bir matrise dönüştürecektir. python yeni_dizi = dizi.reshape(3, 4) print(yeni_dizi) print(yeni_dizi.shape) Bu kodun çıktısı şöyle olacaktır: python [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] (3, 4) Görüldüğü gibi, yeni_dizi iki boyutlu bir NumPy dizisidir ve 3 satır ve 4 sütun içerir. reshape fonksiyonu, dizinin elemanlarını sırayla yeni şekle uyacak şekilde yerleştirmiştir. reshape fonksiyonu, dizinin eleman sayısını değiştirmediği için, yeni şeklin çarpımı eski şekle eşit olmalıdır. Yani, (3, 4) şeklindeki bir dizinin eleman sayısı 3 x 4 = 12 olmalıdır. reshape fonksiyonu, NumPy dizilerinin şeklini değiştirmek için kullanışlı bir araçtır. NumPy dizilerinin şeklini değiştirmek, verileri farklı şekillerde görselleştirmek, analiz etmek veya işlemek için gerekebilir. NumPy kütüphanesi, reshape fonksiyonunun yanı sıra, NumPy dizilerinin şeklini değiştirmek için başka fonksiyonlar da sunar. Bu fonksiyonlar hakkında daha fazla bilgi için, NumPy kütüphanesinin resmi belgelerine bakabilirsiniz. 4. UYGULAMA NumPy dizilerini yeniden boyutlandırma işlemini anlamak için aşağıdaki adımları takip ediniz. 1. Adım: Bir boyutlu NumPy dizisi oluşturunuz. 0 ile 15 arasındaki sayıları içeren bir dizi oluşturalım. python import numpy as np dizi = np.arange(0, 16) dizi 2. Adım: Oluşturduğunuz diziyi iki boyutlu hâle getiriniz. 4 satır ve 4 sütundan oluşan bir matris şeklinde yeniden boyutlandıralım. python yenidizi2d = dizi.reshape(4, 4) yenidizi2d 3. Adım: Oluşturduğunuz diziyi üç boyutlu hâle getiriniz. 2 katman, 4 satır ve 4 sütundan oluşan bir küp şeklinde yeniden boyutlandıralım. python yenidizi3d = dizi.reshape(2, 4, 4) yenidizi3d 4. Adım: Oluşturduğunuz üç boyutlu veya iki boyutlu bir diziyi bir boyutlu hâle getiriniz. -1 parametresini kullanarak dizinin tüm elemanlarını tek bir boyutta sıralayalım. python yenidizi3d.reshape(-1) yenidizi2d.reshape(-1) |