Numpy Nedir? Numpy ile Dizi Oluşturma, Numpy Fonksiyonları
0

Veriler ile çalışabilmek için en kullanışlı ve en popüler Python kütüphanelerden biri olan Numpy kütüphanesi ile tanışacağız ve Numpy’ı, Python’ın dizilerinden ayıran fonksiyonları göreceğiz. Bu yaz birkaç bölümden oluşacak. İlk bölümün içerikleri aşağıdaki şekilde:

Numpy Array (Dizi) Oluşturma

Numpy kütüphanesi ile çalışabilmek için tabii ki önce onu kullanacağımızı bilgisayara anlatmamız lazım. Bu işleme “import” diyoruz.

Bu kod satırı numpy kütüphanesini import ettiğimizi ve bundan sonraki kodlarımızda “numpy” yazmak yerine “np” yazabileceğimizi ifade ediyor.

Kütüphanemizi hep birlikte import edelim ve numpy’ı anlamaya başlayalım.

NP.ARRAY( )

Numpy’da oluşturacağımız arrayler ile çok sayıda veri ile çalışmak bizim için daha kolay olacak. Ayrıca Python’ın listelerinden daha hızlı olduğu için bize ekstra kolaylık sağlayacak.

my_list adında 6 sayıdan oluşan basit bir Python listesi oluşturdum. Şimdi numpy’ın bu kadar popüler olmasını sağlayan fonksiyonunu, my_list üzerinde kullanacağım. Fonksiyonumuz np.array().

“array” kelimesine Java gibi dillerden de aşinayız. Fakat bu seferki “array” bir numpy nesnesi. Yani numpy kütüphanesine özgün. Kontrol etmek için numpy_array’in tipini yazdıralım.

Çıktımız:

“numpy_array değişkeninin türünün n-dimensional array olduğunu görüyoruz”

np.array() fonksiyonunun içine az önce oluşturduğum my_list listemi parametre olarak verdiğimi görüyoruz. Bu aşamada fonksiyondan beklentim şu olmalı:

my_list adlı listeyi al ve numpy kütüphanesine özgü olan .array() fonksiyonu ile listemi bir “array”e dönüştür. Sonra da dönüştürdüğüm veriyi numpy_array adlı değişkene kaydet.

Dönüştürme işlemini yaptıktan sonra numpy_array’i yazdırırsam alacağım sonuç aşağıdaki gibi olacak:

Pek de heyecanlandırıcı bir sonuç almışız gibi durmuyor. Ne gerek vardı numpy’a array’e o zaman? Madem yine liste gibi bir çıktı alacaksak neden uğraştık? Şu anda tek boyutlu bir listeyle çalışıyoruz. O yüzden sonuçlar pek tatmin edici olmayabilir. Tek boyutlu olduğunu nasıl mı anladık?

  • Baştaki köşeli parantezlerin sayısı bize boyutu verir. Başta tek köşeli parantez var bu da tek boyutlu olduğunu gösterir.
  • Sadece bir satırdan ya da sadece bir sütundan oluşuyorsa tek boyutlu olduğunu gösterir.
  • Diyelim ki bu bilgileri bilmiyoruz. O zaman ndim fonksiyonunu kullanarak array’in kaç boyutlu olduğunu bulabiliriz.

NDIM (Number of array dimensions)

Bu kod ile birlikte noktadan önce verdiğimiz array’in kaç boyutlu olduğunu bulabiliriz.

Yukarıda da anlattığım gibi kodun çıktısı 1. Yani tek boyut anlamına geliyor.

Şimdi bir üst boyuta yani 2. boyuta geçelim.

my_list adlı değişkenimi başındaki köşeli parantezlerin sayısından da anlayabileceğimiz şekilde 2 boyutlu olarak tanımladım. Ve değişkenimi np.array fonksiyonuna gönderdim. Bunun sonucunda numpy_array’i yazdırırsam çıktımız, tahmin edeceğimiz gibi şöyle olacak:

Ve ndim fonksiyonunu kullandığımda bana 2 boyutlu bir array ile çalıştığımı söyleyecek.

Şimdi bu array’in satır ve sütun sayısına bir bakalım. Sonuçta array’lerde en önemli şeylerden biri satır ve sütunların sayısını bilmektir ki elimizdeki verinin ne kadar büyük olduğunu anlayalım. Solda 2 satır var, üstte de 1,2,3,4… Böyle saymamak için zaten çok kullanışlı ve basit bir fonksiyon var elimizde.


SHAPE

Önceki fonksiyonlarımız gibi shape fonksiyonunu da noktadan sonra yazıyoruz ve çıktımız ise aynen şöyle:

2 satır(row), 6 sütun(column)’dan oluştuğunu anlıyoruz.

Numpy fonksiyonları ile matris oluşturma

my_array adında bir numpy array oluşturdum fakat içindeki elemanları yazmam biraz zaman aldı. Ve sürekli böyle uğraşmak doğrusu canımı sıkar. Buna çözüm olarak arange fonksiyonuna bakalım.


ARANGE

np.arange yazdıktan sonra parantez içine sırasıyla start, stop ve isteğe bağlı olarak step değerlerini girmeliyim. Start değeri başlangıç sayısını, stop değeri hangi sayıya gelince duracağını ve step değeri ise iki sayı arasında ne kadar fark olacağını belirler. Örnekte 16 sayısını kalın yazmamın sebebi ise:

Array’imizin son elemanı 15 olarak belirlendi. Çünkü stop değerini 16 olarak verdik. Yani 16’yı gördüğün anda dur, demek bu. 16’yı alma. Fakat bir şeyler eksik kaldı. Yukarıda tanımladığım my_array ikişer ikişer ilerliyor. Bunu tabii ki step değerini 2 olarak verirsem başarabilirim. Deneyelim:

Step değerini 2 olarak verdim ve yukarıdaki my_array’in aynısını elde etmeyi başardım.


LINSPACE

linspace, arange fonksiyonuna benzer ve yine kolayca array oluşturabilmemizi sağlayan bir fonksiyon.

linspace fonksiyonuna verdiğimiz parametreler ne anlama geliyor?
0’dan 20’ye kadar olan sayıları al ve aralarından 5 adet sayı seç. Seçilecek bu 5 sayının hepsinin aralarındaki fark eşit olsun. dtype yani “data type” integer (tamsayı) olsun. Yani küsuratlı sayılar olmasın.

Output’ta da gördüğümüz gibi 0’dan 20’ye kadar 5 tane sayı seçilmiş ve hepsinin arasındaki fark 5 yani aynı.

Peki arange örneğinde stop değerini dahil etmemesine rağmen, linspace örneğinde neden stop değeri dahil oldu? linspace’in kullanım alanları farklılık gösterdiği için, bu fonksiyona stop değeri verildiğinde diziye dahil ediliyor.

Eğer ki stop değerinin diziye dahil edilmemesini isterseniz, parantez içine ek parametre olarak “endpoint = False” verebilirsiniz. Böylece stop yani bitiş değerimiz dahil edilmez. Parametre olarak endpoint ile alakalı herhangi bir bilgi vermezseniz, default olarak True kabul edilir ve bitiş değeri de dahil olur.


ONES | ZEROS | EYE | EMPTY | FULL

Bazı spesifik matrisleri oluşturmak için hazır fonksiyonlar mevcuttur. Bu matrisler tamamen sıfırdan ya da birden oluşan matrisler olabilir.

ONES

ones fonksiyonuna 5 değerini verdiğimde ve yazdırdığımda çıktı olarak 5 elemana sahip ve elemanlarının hepsi 1 olan bir dizi aldım. 5 x 5’lik bir matris oluşturmak istersek nasıl yapacağımıza bakalım. Burada küçük bir detay var.

5 x 5’lik, her elemanı 1’den oluşan bir matris oluşturmaya çalıştım fakat TypeError ile karşılaştım. Hata metnini incelediğimizde, eklediğim ikinci 5 sayısının bir “veri tipine” çevrilemediğini anlıyorum. Demek ki program, parantez içindeki virgülden sonra benden parametre olarak veri tipi girmemi istiyor. Yani 5 yerine int, float gibi değerler yazılmalı. Şimdi bu kodun doğru yazılışının nasıl olduğuna bakalım.

Gördüğünüz gibi (5, 5) değerini bir parantez içine aldım. Buradaki anahtar nokta şu: Bildiğimiz gibi bir fonksiyonun parantezlerinin içine parametreler verebiliyoruz. Ve bu parametreleri birbirinden ayırmak için “,” kullanıyoruz. Virgülden önce matrisin kaça kaç olacağının bilgisini, virgülden sonra da “dtype = int/float” parametresini istiyor. Output’a bakarsanız her 1’in sağında bir nokta olduğunu göreceksiniz. Bunu 1.0 olarak düşünebilirsiniz. Yani bu değer küsuratlı (float). Yani fonksiyon default olarak float tipinde değer veriyor. Eğer virgülden sonra dtype=int parametresini verseydim o zaman 1’lerin sağındaki noktalar kaybolacaktı.

Bunun üzerine kodu değiştirdim ve matrisin kaça kaç olacağının bilgisini parantez içinde verdim ki, fonksiyon virgülden sonrasını farklı bir parametre olarak görmesin.


ZEROS

zeros fonksiyonu, ones fonksiyonu ile neredeyse aynı. Tek fark bu sefer sadece 0’lardan oluşan bir matris elde ediyoruz.


EYE

eye fonksiyonu, köşelerinin 1, geri kalan elemanlarının 0 olduğu bir matris elde etmemizi sağlıyor. Parametre olarak verdiğimiz sayı ise, matrisin kaç adet köşe içereceğini yani kaç adet “1” içereceğini belirliyor.


EMPTY

empty fonksiyonuna baktığımız zaman tahmin ettiğimiz gibi gözükmediğini fark edeceğiz. numpy.empty((4, 4)) kodunu çalıştırdığımızda karşımıza 4×4 bir matris gelecek. Matris elemanlarının boş olacağını düşünmüş olabilirsiniz. Empty fonksiyonunda, numpy bize aslında değerleri manuel olarak değiştirilmesi gereken bir dizi veriyor. Numpy dokümanlarındaki ifadeyi incelersek tam olarak ne işe yaradığını anlamak kolaylaşacak.

“Array of uninitialized (arbitrary) data of the given shape, dtype, and order. empty unlike zeros, does not set the array values to zero, and may therefore be marginally faster. On the other hand, it requires the user to manually set all the values in the array, and should be used with caution.”

“Verilen şekil, veri tipi ve yönteme göre kullanıma hazır, değerleri keyfi belirlenmiş veri dizisi.
empty fonksiyonu, zeros fonksiyonunda olduğu gibi değerleri 0 (sıfır) olarak belirlemez. Kullanıcının manuel olarak tüm değerleri kendi ayarlaması gerekir.”


FULL

full fonksiyonuyla, belirlediğimiz şekilde (örnekte 3×4) bir matris oluşturup, bu matrisin tüm elemanlarını belirlediğimiz sayıyla (örnekte 9) doldurabiliriz.

 

Numpy serimin devamını da yakında paylaşıyor olacağım. Yazılarımın devamı için sitemizi ziyaret etmeyi unutmayın.

Ne Düşünüyorsun?
  • 14
    harika_
    Harika!
  • 2
    g_zel_
    Güzel!
  • 0
    haval_
    Havalı!
  • 0
    e_lenceli_
    Eğlenceli!
  • 0
    _zg_n_m_
    Üzgünüm!
  • 0
    sevmedim_
    Sevmedim!
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir