Numpy Hızlı Başlangıç Kılavuzu
İçindekiler
Önkoşullar
- Birazcık Python bilgisine sahip olmanız gerek.
- Bazı örnekleri çalıştırmak için matplotlib kütüphanesini kurmak zorunda kalabilirsiniz.
Öğrenme Profili
- NumPy Array’lerine hızlı bir bakış atacaksınız.
- Array’lerin nasıl tanımlandığını ve manipüle edildiğini öğreneceksiniz.
- For döngüsü kullanmadan genel işlevleri uygulayabileceksiniz.
- Array’lerde axis ve shape özelliklerine hakim olacaksınız.
Hedefler
- Bu makaleyi okuduktan sonra şunları yapabiliyor olmanız gerekir:
- NumPy’de dimension nedir ve 1, 2 veya daha fazla dimension’a sahip Array’ler arasındaki farkı anlamış olmanız gerekmektedir.
- Temel işlemlerin for döngüsü kullanılmadan NumPy Array’lerine nasıl uygulandığını öğrenmiş olmanız gerekmektedir.
- NumPy Array’ler için axis ve shape özelliklerini anlamış olmanız gerekmektedir.
Temeller
3 boyutlu uzayda [1, 3, 5] olarak tanımlanan elemanlar dizisi aslında bir noktanın koordinatlarını temsil eder ve bildiğiniz gibi bir noktanın tek bir ekseni vardır. Bu noktanın kooardinatlarını ifade eden [1, 3, 5] elemanlar dizisinin 3 adet elemanı olduğunu söyleyebiliriz. Şimdi aşağıda ifade edilen elemanlar dizisine bakalım.
Burada 2 eksen vardır. XY kooardinat sistemi gibi düşünebilirsiniz. İlk eksenin uzunluğu 2 ve ikinci eksenin uzunluğu ise 3’tür. İlk eksen olarak ifade ettiğimiz eksen (Kooardinat sisteminde Y ekseni) aslında NumPy’de axis = 1 olarak ifade edilmektedir. İkinci eksen olarak ifade ettiğimiz eksen ise (Kooardinat sisteminde X ekseni) NumPy’da axis = 0 olarak ifade edilmektedir.
NumPy’ın Array sınıfına aslında ndarray denilmektedir. NumPy Array’lerinin Python’daki Array’ler ile aynı şey olmadığını unutmayın. Şimdi NumPy Array’lerinin (ndarray) önemli özelliklerinden bazılarına bakalım:
- ndarray.ndim (Array’in axis sayısını(dimensions) döndürür.)
- ndarray.shape (Satır(rows) ve sütun(columns) sayısını döndürür.)
- ndarray.size (Array’ın toplam eleman sayısını verir. Satır ve sütun çarpımına eşittir.)
- ndarray.dtype (Array’deki elemanların türünü açıklar. NumPy’ın kendi türlerini tanımladığını unutmayın. numpy.int32, numpy.int16 ve numpy.float64 gibi…)
- ndarray.itemsize (Array’ın her bir elemanının bayt cinsinden boyutu. Aslında bu ifade ndarray.dtype.itemsize şeklinde de kullanılabilir.)
- ndarray.data (Array’ın elemanlarının içeren bellek adresini tanımlar. Aslında buna çok ihtiyacımız yok. Bakınız: Indexing Facilities)
Bir Örnek
Array Oluşturma
NumPy’da Array oluşturmanın birden çok yöntemi vardır. Örneğin dizi özelliklerini kullanarak Python listesinden bir NumPy Array oluşturabilirsiniz. Oluşturduğunuz NumPy Array’ın türü ise elemanları doğrultusunda değişkenlik göstermektedir. Çok sık karşılaşılan bir hata Array tanımlamalarında [] ifadesini unutmayınız.

Array’ler dizi özelliklerinden faydalanarak 2 boyutlu, 3 boyutlu veya daha fazla NumPy Array’ler tanımlanmasına imkan tanımaktadır.

Array’lerin türünü oluşturma sırasında belirtilebiliriz:
Peki ya oluşturacağımız Array’ın ögelerini ilk başta bilmiyorsak? NumPy bize bu durumda boyutunu bildiğimiz fakat ögelerini bilmediğimiz Array’ler için yer tutabilmemiz için bir çok imkan sağlamaktadır. Bu imkanlar sayesinde sonradan büyüyen Array’lerden kurtulmuş oluruz.
Sayı dizileri oluşturmak istediğimizde NumPy bize Python’daki range yapısına benzeyen arange yapısını kullanarak Array’ler döndürür.
arange ile Array oluşturduğumuzda elde edilen öğelerin sayısını tahmin edemiyoruz. Bu da bize çok büyük uzunluklarda öğeler döndürme ihtimalinin olduğunu gösteriyor. Bu nedenle arange yerine istediğimiz sayıda öğe döndüren linspace yapısını kullanmak daha iyi bir tercih olabilir. Aşağıda bu konu ile alakalı bir örnek göreceksiniz.
Array’lerin Yazdırılması
Bir Array’ı print ettiğinizde NumPy bunu nesned list’lere benzer bir yöntemle gösterir. Bu işlemleri de aşağıdaki düzenle gerçekleştirir:
- Son eksen soldan sağa yazdırılır.
- Sondan ikinci eksen yukarıdan aşağıya doğru yazdırılır.
- Geri kalan eksenleri de yukarıdan aşağıya doğru yazdırır. Her parça kendinden sonra gelen parçadan bir satır boşlukla ayrılır.
Örneğin:
Eğer bir Array yazdırılamayacak kadar büyükse NumPy bu Array’ı print ederken sadece ilk ve son kısmını gösterir.
Yok ben her şeyi görmek istiyorum derseniz de buyurun işte bu kod parçasını çalışmanıza ekleyin.
Temel İşlemler
Array’lerde aritmatik işlemler eleman bazında uygulanır. Bunu uygularken yeni bir Array oluşturmalısınız ve sonuçları yeni oluşturduğunuz Array’e döndürmeniz gerekmektedir.
Eğer matrislerde çarpma işlemi yapacaksanız * operatörü eleman bazlı işlem yaptığı için bu sizin istediğiniz cevabı elde etmenize olanak tanımaz. Hatta kare olmayan matris çarpımlarında da hata verecektir. Bunu yapmanın iki farklı yöntemi var. Birincisi @ operatörünü kullanmak. İkincisi ise .dot() fonksiyonunu kullanmak. (Python sürümünüzün 3.5 ve yukarısı olduğundan emin olun)
+=, -= *= gibi operatörler sizin yeni bir Array oluşturmadan sonucu direkt olarak varolan Array üzerine yazmanız için kullanılabilir.
Farklı türlerdeki Array’ler üzerinde çalışırken her zaman daha genele upcasting edildiğini unutmayın.
ndarray sınıfının Array’ler üzerinde uyguladığı bir çok tekil yöntem vardır. Örneğin Array’daki tüm öğelerin toplamını hesaplamak için kullandığımız .sum() gibi…
Tekil yöntemler uygulandığında varsayılan olarak Array sanki sayı listesiymiş gibi algılanır ve işlemler bu sayı listesine göre uygulanır. Peki bu işlemleri eksen belirterek (axis parameter) uygularsak nasıl olur. Bence çok güzel olur. Hadi deneyelim.
Evrensel Fonksiyonlar
NumPy sin, cos, exp gibi tanıdık matematik işlevlerini bize sağlar ve bunları Evrensel Fonksiyonlar (“Universal Functions”) olarak tanımlar. Bu fonksiyonlar Array’ler üzerinde element bazlı çalışırlar ve çıktı olarak da bir Array üretirler.
Bakınız: all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, invert, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where
İndeksleme, Dilimleme ve Yineleme
Tek boyutlu Array’ler Python’da listeler ve diziler gibi indekslenebilir dilimlenebilir ve yenileme yapılabilir.
Çok boyutlu Array’ler eksen başına bir dizine sahip olabilir. Bu endeskler virgülle ayrılmış bir demet halinde olabilir.
b Array’inde kullanılan [] içerisinde bulundurduğu :‘lar ile eksenleri ve öğeleri belirlemek için kullanılır. Ayrıca NumPy bu işlemleri noktalar kullanark da yapmamıza olanak sağlamaktadır. Bakınız: b[1, …]. Noktalar tam bir indexleme olarak belirtilebilir.
Bununla birlikte Array’daki her bir eleman üzerinde bir işlem yapmak gerekirse flat özellii ile bunu yapabiliriz.
Buraya kadar sabırla okuduğunuz için teşekkür eder, bu yazının güncelleneceğinden ve devamının olacağından haberdar olmanızı isterim. 🙂
Bir Yorum Bırakın
Yorumları Göster