NumPy, Python programlama diline ait çok boyutlu dizilerle ve matrislerle çalışmamıza yardım eden ileri düzey matematiksel işlemler yapabileceğimiz bir kütüphanedir. Günümüzde özellikle veri bilimi üzerine çalışanlar başta olmak üzere Numpy, Python programlayanlar tarafından çok sık kullanılan bir kütüphanedir.
İçindekiler
Numpy Nedir?
- Açık Kaynak ve numerik bir Python kütüphanesidir.
- Çok boyutlu dizin ve matris veri yapılarını içerir
- Numeric ve Numarray öğelerinin uzantısıdır.
- Rastgele sayı üreteçlerine sahiptir.
- Pandas nesneleri büyük ölçüde Numpy ile bağlantılıdır. Buna Pandas Numpy’i genişletir diyebiliriz.
- Dizinler üzerinde matematiksel, cebirsel ve istatistiksel operasyonlar uygulamak için kullanılır.
Numpy Kullanımı
Öncelikle eğer bilgisayarınızda Numpy kütüphanesi kurulu değilse terminalden bu komut ile Numpy’ı indiriyoruz.
>>> pip install numpy
Artık sistemimizde Numpy kütüphanesine sahibiz. Eğer Numpy kullanacaksak kodumuzu yazmaya başlamadan önce kütüphaneyi çağırmamız gerekmekte. Import ile kütüphaneyi çağıracağız ve çoğu kişinin kullandığı “np” aliasını (takma adını) kullanacağız.
import numpy as np
Boş Array Oluşturma
Şimdi sıra Numpy kütüphanesini en çok ilgilendiren veri tipinde: Diziler. Numpy ile boş bir dizi oluşturmanın birden fazla yolu vardır.
np.array() :
np.array(), Numpy’da basit bir şekilde bir dizin oluşturmanızı sağlar. np.array() metodu hakkında daha fazla bilgiye ve aldığı parametrelere buradan ulaşabilirsiniz.
np.arange():
np.arange() fonksiyonu 4 parametre alır. Bunlar başlangıç değeri, bitiş değeri, değişim miktarı ve veri tipidir. Fonksiyon başlangıç noktasından bitiş noktasına kadar değişim miktarı kadar artarak girilen veri tipinde değerler üretir. Yukarıdaki örnekte başlangıç 0, son ise 12’ydi. Değişim miktarımızda 3 olduğundan np.arange() fonksiyonu 0’dan üçer üçer artarak bize bir dizin üretti.
np.arange() fonksiyonu n-boyutlu dizinler oluşturmak için oldukça uygundur. Fonksiyon ilk olarak tek boyutlu bir dizin oluştursa da np.reshape() metodu ile dizininizin boyutlarını istediğiniz gibi ayarlayabilirsiniz.
np.linspace():
np.linspace() metodu başlıca 3 parametre alır. Başlangıç, dizinin hangi sayıdan başlayacağıdır. Bitiş, dizinin hangi sayıya geldiğinde son bulacağıdır. Bir de num, dizinin kaç elemana sahip olacağıdır. np.linspace() metodu başlangıçtan sona num tane sayıyı birbiri arası uzaklık eşit olacak şekilde böler. Metot hakkında daha fazla bilgiyi burada bulabilirsiniz.
np.zeros():
np.zeros() bir tuple (demet) değeri alır. Bu tuple değeri, oluşturmak istediğimiz dizinin boyutlarının değerleridir. Örnekte girilen (4,4) dizinin 4 satır ve 4 sütundan oluşacağını belirtmek içindir. np.zeros() ise bu boyutlarda ve sıfırlardan oluşan bir dizin üretir.
np.ones():
np.ones() fonksiyonu da np.zeros() mantığında çalışır ve girilen boyutlarda oluşturduğu dizini 1’lerle doldurur.
np.full():
np.full() metodu başlıca 2 parametre alır. İlki istenilen dizinin boyutu, ikincisi ise dizinin hangi sayıdan oluşacağı. Yukarıdaki örnekte oluşturduğumuz (2,3)’lük bir matrisin sadece 8 değerini içermesini istedik ve np.full() metotu bunu bizim için yaptı.
np.random():
np.random() istenilen boyutta bir dizin oluşturur ve bu dizini 0 ve 1 aralığında üretilmiş rastgele ondalık sayılar ile doldurur. Buradaki dökümantasyondan np.random() hakkında daha fazla bilgi alabilirsiniz.
Lineer Cebir
Numpy’ın bize sağladığı en büyük kolaylıklardan birisi de cebirsel işlemleri halletmemiz için sahip olduğu fonksiyonlar. İsterseniz 2 farklı Numpy dizini oluşturalım ve örneklerden devam edelim.
dizin1 = np.array((1,2,3))
dizin2 = np.array((2,3,1))
np.dot():
np.dot() metodu sonuç olarak aldığı iki Numpy dizininin nokta çarpımı ya da bir diğer adıyla skaler çarpımını döndürür.
np.matmul():
np.matmul() fonksiyonu çıktı olarak bize, girilen 2 dizinin matris çarpımı sonucunu verir.
np.T:
Cebirde bir matrisin transpozunu bulmak için matrisin sütunları satırlar, satırlarını ise sütunların yerine koyarız. Numpy sayesinde np.T ile matrisin transpozunu rahatlıkla bulabilmekteyiz.
Determinant, identitiy(birim) matris, logaritmik değerler gibi bir çok şeyi Numpy ile bulabilmekteyiz. Bu yazıda az sayıda örnek verdiysek de buradan diğer fonksiyonlara ulaşabilirsiniz.
İstatistik
İstatistik her ne kadar zevkli bir alan olsa da karmaşıklığıyla bazen bizleri oldukça zorlamakta. Numpy kütüphanesi sayesinde çok büyük veri setlerinde rahatlıkla istatistiksel analizler yapabilmekteyiz. Şimdi verdiğimiz diğer örneklere kıyasla biraz daha uzun bir dizin üzerinden gidelim.
boy_olculeri_cm = np.random.randint(low = 150,high = 200,size = 20,dtype = int)
Yukarıdaki kod parçacığı ile 150 ve 200 arasında tam 20 integer (tam sayı) elemana sahip bir Numpy dizini oluşturduk. Bu dizini oluşturan bir sınıftaki öğrencilerin santimetre(cm) cinsinden boy ölçüleri olduğunu varsayalım. Dizinimizin içerdiği elemanlar aşağıdaki şekilde olacaktır. Bu değerler sizde farklılık gösterebilir çünkü bu elemanları Numpy ile rastgele olacak bir biçimde ürettik.
[171, 187, 155, 191, 174, 184, 159, 175, 193, 174, 156, 167, 187,158, 158, 190, 157, 168, 153, 169]
np.median():
Bir dizinin medyanı o dizini sıraladığımızda tam ortasına denk gelen elemana denir. Bizim bu sınıfımızdaki boy ölçülerinin medyanını np.median() fonksiyonu ile rahatlıkla bulabiliriz. Yukarıdaki örnekte görüldüğü üzere sınıfımızın boylarının medyanı 170’dir.
np.mean():
np.mean() ise verilen dizinin değerlerinin ortalamasını bulmak için kullanılır. Yine örneğimiz üzerinden gidersek sınıfın boylarının ortalaması 171.3 cm’dir.
np.std():
Standart sapma bir dizindeki verilerin ortalamaya göre dağılımının sayısal olarak gösterimidir. Normal şartlarda standart sapmayı bulmak için :
- Sayıların artimetik ortalaması bulunur,
- Her bir sayı aritmetik ortalamadan çıkarılır ve sonucun karesi alınır,
- Bu kareler toplanır ve toplam serinin eleman sayısının 1 eksiğine bölünür,
- Bu sonucun karekökü alınır.
Standart sapmayı bulmak için bu işlemleri yapmamız gerekir fakat Numpy kütüphanesi np.std() fonksiyonuyla arka planda bu işlemleri yapar ve sonucu bize getirir.
Numpy görüldüğü üzere çok fazla matematiksel hesaplamalarda kullanılabilir. Az sayıda örnekler üzerinden gittik fakat Numpy’ın kendi dökümantasyonlarından istediğiniz metoda bakabilirsiniz.
Numpy’ın Dizinleri vs. Python’un Kendi Dizinleri
Aslında bakacak olursak Numpy’ın da Python’un da dizileri birbiriyle çok fazla benzerlikler göstermekte. İki türde de veri saklarsınız, indeklersiniz ve iterate (yenilemek) edebilirsiniz.
Fakat Numpy ile oluşturacağınız dizinler hem çok daha az boyutta yer kaplar hem de Python dizinlerine kıyasla oldukça hızlı çalışırlar. Ayrıca Python dizinlerinde çoğu matematiksel işlemi doğrudan yapamazsınız. Bunlara örnek vermek gerekirse toplama, çıkarma, çarpma, bölme ve kuvvet alma. Fakat Numpy sayesinde bunu rahatlıkla yapabiliriz.
# Python Dizini
In [0]: yeni_dizin = [2,4,5,2,1,4]
In [1]: print((yeni_dizin) * 2)
Out[1]: [2, 4, 5, 2, 1, 4, 2, 4, 5, 2, 1, 4]
# Numpy Dizini
In [2]: yeni_dizin = np.array([2,4,5,2,1,4])
In [3]: print((yeni_dizin) * 2)
Out[3]: [ 4 8 10 4 2 8]
Örnekte görüldüğü üzere ilk dizini 2 ile çarptığımızda Python dizinden bir tane daha oluşturup diğerinin sonuna ekledi fakat Numpy tüm değerleri 2 ile çarptı.
Numpy Veri Tipleri
Numpy Python’a göre çok daha fazla ve farklı veri tiplerini destekler. Aşağıdaki tabloda Numpy’ın içerdiği veri tiplerini bulabilirsiniz.
Sonuç olarak Numpy bize gerek matematiksel işlemler gerekse dizinler üzerinde yapacağımız komplike işlemlerde oldukça kolaylık tanımaktadır. Eğer Python ile kodlama yapmaya ilgili iseniz Numpy’a bir göz gezdirmenizi tavsiye ederiz.