Numpy kütüphanesi Python'da birçok nümerik işlemi ve matris operasyonlarını etkin bir şekilde yapabilmemizi sağlar. Eğer daha önceden Matlab kullandıysanız aşağıdaki bağlantıda verilen öğreticiye (tutorial) göz atmanızı öneririm.
https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html
Hazırsanız başlayalım
numpy dizileri Pyhton listelerine benzer. Temel özellikleri şunlardır
# Kütüphaneyi yüklüyoruz
# Genelde hep np olarak import edilir
# İsterseniz başka bir şey de diyebilirsiniz size kalmış
import numpy as np
# np.array'in içine bir liste yazmamız yeterli
a_numpy_array = np.array([3,5,2,1])
# ekrana bastıralım
print(a_numpy_array)
# tipini görelim
print(type(a_numpy_array))
# ilk elemanına bakalım
print(a_numpy_array[0])
# bir elemanını değiştirelim
a_numpy_array[1]=42
print(a_numpy_array)
Her bir dizinin içindeki veri tipini de değiştirmemiz mümkün.
a = np.array([1,2],dtype=np.int16)
b = np.array([1,2],dtype=np.float64)
print(a)
print(a.dtype)
print(b)
print(b.dtype)
# iki boyutlu bir matris yapalım
# Bunun için liste içinde iki listeye sahip bir girdi sağlamamız lazım
# Eklemeyi satır satır yapıyoruz
b_numpy_array = np.array([[2,3,4],[4,5,6]])
# İki boyutlu matrisimiz hazır
print(b_numpy_array)
# Boyutunu görmek için shape fonksiyonunu kullanabiliriz
print("\nMatrisin boyutları")
print(b_numpy_array.shape)
# Matrislere erişim için çift indekleme kullanılıyor
print(b_numpy_array[0,1]) # Birinci satır 2. sütundaki elemana erişim
Matrislerin satırlarını listeler halinde veriyoruz. Bu listelerin boyutlarının birbirine eşit olmasına dikkat etmekmiz gerekiyor aksi takdirde istediğimiz matrisi yaratamayız
# Diyelim ki bir satır diğerinden boyut olarak fazla oldu
c_numpy_array = np.array([[2,3,4],[4,5,6,7]])
print(c_numpy_array)
Dizi yaratma fonksiyonları
numpy kütüphanesinin dizi yaratmak için hazır fonksiyonları da mevcuttur. Aşağıda en sık kullanılanlardan örnek vermek isiyorum.
# 0'lardan oluşan bir matris yaratalım
print("\nSıfır matris")
print(np.zeros((3,2)))
# Birlerden oluşan bir matris yaratalım
print("\nBirlerden oluşan matris")
print(np.ones((2,3)))
# Sabit sayılardan oluşan bir matris
print("\nSabit matris")
print(np.full((4,3),42))
# Birim (identitiy) matris
# Bu matrix simetrik olacağı için yalnızca bir parametre alıyor
print("\nIdentity matris")
print(np.eye(2))
# Rasgele matris
print("\nRasgele matris")
print(np.random.random((3,3)))
np.empty() fonksiyonu
Bu fonksiyon yeni bir dizi yaratır fakat dizinin içini 0'lar veya 1'ler ile dolrumaz
a = np.empty((2,4))
print(a)
Kesit alma
Matrisleri parçalamak için kesit alma operatörleri kullanılabilir.
a_matrix = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
print(a_matrix)
# 2. satırdan 3. satıra 2. sütundan sonuna kadar olan elemanlardan oluşan matris
print(a_matrix[1:3,2:])
# Son satırın tümünü alalım
print(a_matrix[2,:])
# Son sütunun tümünü alalım
print(a_matrix[:,3])
# Yukarıdaki örnek matrisin (0,0) ve (1,2) numaralrı elemanlarını alalım
print(a_matrix[[0,1],[0,2]])
np.arange() fonksiyonu
Bu fonksiyon ardışık bir dizi oluşturur. !! Son eleman diziye dahil değildir !!
# 1'den 10'kadar bir dizi oluşturalım
print(np.arange(1,10))
# Dizi 2'şer artarak oluşturulsun
print(np.arange(1,10,2))
np.linspace() fonksiyonu
Bu fonsiyon np.arange() fonksiyonuna benzer. Farklı olarak verilen iki sayı arasını istenilen nokta sayısı ile doldurur. Örneğin 1 ile 10 arasında 20 nokta sayı istersek aralıkları otomatik olarak hesaplar ve bize istediğimiz diziyi döndürür.
a = np.linspace(1,10,20)
print(a)
print(a.shape)
Mantıksal indeksleme
Matriste belirli koşulu sağlayan elemanların bulunmasını sağlar
a = np.array([[1,2,5,6], [8,9,7,8], [9,10,2,42]])
print("Örnek matris")
print(a)
print("\n5'ten büyük sayıları bulmak için mantıksal indeksi yazdıralım")
print([a>5])
print("\n5'ten büyük sayıları bulalım")
print(a[a>5])
print("\n5'ten büyük sayıları 0'a eşitleyelim")
a[a>5] = 0
print(a)
Eleman bazında yapılan işlemler
A = np.array([[1,2],[3,4]])
print("\nA matrisi")
print(A)
B = np.array([[5,6],[7,8]])
print("\nB matrisi")
print(B)
print("\nA+B")
print(A+B)
print("\nA matrisine sabit sayı ekleme")
print(A+100)
print("\nA-B")
print(A-B)
print("\nA*B")
print(A*B)
print("\nA/B")
print(A/B)
print("\nKarekök alma sqrt(A)")
print(np.sqrt(A))
print("\nÜs alma A**2")
print(A**2)
Matris işlemleri
print("Matris çarpımı (Dot product) A.dot(B) ")
print(A.dot(B))
print("veya np.dot(A,B)")
print(np.dot(A,B))
print("Transpose alma A.T")
print(A.T)
Yeniden şekillendirme
Bir diziyi yeniden şekillendirebiliriz. Yani bir vektörü matrise çevirmemiz veya tam tersini yapmamız mümkün.
# Uzunluğu 9 olan bir vektör yaratalım
a = np.arange(9)
print(a)
# Bunu 3x3 matris haline çevirelim
a_reshape = a.reshape((3,3))
print(a_reshape)
# Bu matrisi tekrar vektör haline getirelim
print(a_reshape.flatten())
Matrisleri birleştirme
Matris ve vektörleri yan yana veya üst üste eklemek için np.concatenate() fonksiyonunu kullanabiliriz.
A = np.array([[1,2],[3,4]])
print("\nA matrisi")
print(A)
B = np.array([[5,6],[7,8]])
print("\nB matrisi")
print(B)
print("\nA ve B'yi alt alta ekleyelim")
print(np.concatenate([A,B]))
print("veya np.vstack() kullanalım")
print(np.vstack([A,B]))
print("\nA ve B'yi yan yana ekleyelim")
print(np.concatenate([A,B],axis=1)) # axis=1
print("veya np.hstack() kullanalım")
print(np.hstack([A,B]))
Matrisleri ayırma
Matrisleri ayırmak için np.split() fonksiyonu kullanabiliriz.
C = np.array([[1,2,3,4],[5,6,7,8]])
print(C)
print("\n")
print("Satır indeksine göre ayırma")
x,y = np.split(C, [1],axis=0)
print(x)
print(y)
print("\n")
print("Sütun indeksine göre ayırma")
x,y = np.split(C, [1],axis=1)
print(x)
print(y)
Eksik ve sonsuz değerleri matrise ekleme
a = np.array([[0,np.nan],[1,np.inf]])
print(a)
Ortalama, minimun ve maximum hesaplama
a = np.array([[1,2,5,6], [8,9,7,8], [9,10,2,42]])
print(a)
print("Ortalama - vektörel olarak, yani tüm elemanların ortalaması")
print(np.mean(a))
print("Ortalama - satırların ortalaması")
print(np.mean(a,axis=0))
print("Ortalama - sütunların ortalaması")
print(np.mean(a,axis=1))
print("Minimum - vektörel olarak, yani tüm elemanların minimumu")
print(np.min(a))
print("Minimum - satırların minimumu")
print(np.min(a,axis=0))
print("Minimum - sütunların minimumu")
print(np.min(a,axis=1))
print("Maksimum - vektörel olarak, yani tüm elemanların maksimumu")
print(np.max(a))
print("Maksimum - satırların maksimumu")
print(np.max(a,axis=0))
print("Maksimum - sütunların maksimumu")
print(np.max(a,axis=1))
Yegane (Unique) elemanların bulunması
a = np.array([1,2,2,1,3,4,5,3,6,42,1,3,42,3])
print(a)
u,c = np.unique(a,return_counts=True)
print("Dizideki yegane elemanlar")
print(u)
print("Dizideki yegane elemanların kaç adet oldukları")
print(c)