Numpy Modülü Kullanımı [Her Yönüyle]

mes9446

Yeni üye
10 Haz 2014
3
0
UYARI : Eğer matrisler hakkında temel bilginiz yoksa konunun rahat anlaşılabilirliği için önce matrislere çalışmanızı öneriyorum.

Herkese merhaba. Pythonun bir kütüphanesi olmasına karşılık numpy, makina öğrenmesinde matris işlemlerinin kolayca gerçekleştirilmesi için kullanılan oldukça popüler, C dili ile yazılmış,son derece hızlı bir kütüphanedir. Elbette sadece matris işlemleri için değil.Bilimsel hesaplamaları çok mu çok kolay yapabileceğiniz harika bir kütüphane,fakat bugün makina öğrenmesinde ekseriyetle kullanılan kısımlarına değineceğiz.Kim yazmış,kütüphanenin gelişimi gibi detayları hiçbirinizin merak etmeyeceğini düşünerek,nasıl kullanırız onu anlatmaya başlayalım.
Kurulum​
Numpy kullanımını merak edip bu konuya tıkladıysanız zaten dışarıdan yüklemeyi gayet iyi biliyorsunuzdur,hatırlatalım,
Kod:
pip install numpy
İmport edilmesi
Kod:
import numpy as np

Array oluşturma
Python listelerine benzer olsa da numpy in bazı farklılıkları var. Mesela array daki tüm elemanlar aynı veri tipinde olmak zorunda.
Kod:
ilk_arrayimiz=np.array([1,2,3,4,5])
Şuan pythonda gömülü gelen listeden pek bir farkı yok.Biz daha çok matris,vektör işlemlerinde kullanacağımız için, bunu bir satır matrisine çevirelim.
Kod:
satir_matrisi=np.array([[1,2,3,4,5]])
İlk köşeli parantezler tek boyutlu matrisimizin parantezleri. 2.si bu matrisin ilk satırını gösteriyor.
Hatırlatma
Bir matris tek satırdan oluşuyorsa satır,tek sütundan oluşuyorsa sütun matrisi denir.
Şimdi daha iyi anlaşılması için 3x3 lük bir matris oluşturalım. (3satır, 3sütun)
Kod:
A=np.array([[3,2,4],[2,0,2],[4,2,3]])
opoDF1.png

Şimdi 2 boyutlu bir matris oluşturalım ki konu daha anlaşılır olsun. Eğer matriste boyut işlemlerini anlamadıysanız
[ame]https://www.youtube.com/watch?v=39RCsMbiseg[/ame]
Bir de 3 boyutlu matris oluşturalım.
Kod:
B=np.array([[[0,1,2],[3,4,5],[6,7,8]],[[9,10,11],[12,13,14],[15,16,17]],[[18,19,20],[21,22,23],[24,25,26]]])
Boyut hesaplamanın pratik bir yolunu söyleyeyim size, np.array( den sonra köşeli parantezleri sayıyorsunuz. 3 boyutta 3 köşeli parantez olur en başta.
Numpy in kullanıslı bir özelliği(property) var ve bizim için dizi kaç boyutlu, kaç satır kaç sütundan oluşuyor söylüyor= shape
B nin shape ini öğrenelim:
Kod:
B.shape

Dikkat edin, fonksiyon değil bu shapeden sonra parantez koymuyoruz. Shape bize tuple veri tipinde dizimizin boyutunu döndürüyor;
(3,3,3) ilk sayı boyut,ikincisi satır ve üçüncüsü sütun.
Arrayimizin içinde kaç eleman var??

Kod:
B.size

Gerçi shape nin içindeki tüm sayıları çarparsanız yine kaç elemanımızın olduğunu öğrenebilirsiniz ama neyse.

Sadece Sıfır(0) lardan oluşan matris oluşturma
Kod:
np.zeros((3,3))
Parantezin içine tekrar parantez açıp, kaç boyut kaç satır kaç sütunluk bir veri yazacağımızı giriyoruz(Tuple cinsinden).Default olarak float tipinde veri üretir.
Sadece 1 lerden oluşan matris oluşturma​
Kod:
np.ones((2,3))
Tekrar tekrar anlatmayacağım,zeros ile aynı mantık.
FULL
np.full(shape,sayi) full ilk parametre olarak shape alır ,ikinci parametrede de yazdığınız sayıyı matrisin tüm elemanları yapar. Örneğin,

Kod:
full_kullanalim=np.full((3,3),24)
array([[24, 24, 24],
[24, 24, 24],
[24, 24, 24]])​
E full de 24 yerine 0 yazsaydık zeroya gerek kalmazdı? Zero ve Ones sıklıkla kullanıldığı için oluşturulmuş, isterseniz full kullanın zaten onlar da arka planda full kullanıyorlar :)

Birim Matris Oluşturma
Birim matris köşegenleri 1, diğer tüm elemanları 0 olan matristir. Kare olmak zorundadır.(köşegen olabilmesi için)
4x4 lük bir birim matris oluşturalım

Kod:
np.eye(4)
Zaten kare olacağı için satırı ayrı sütunu ayrı yazmaya uğraşma demişler, iyi de demişler.
opErpH.png
Konu epey uzadı,burada bırakalım. Okuduğunuz için teşekkürler. Anlamadığınız kısımları severek cevaplarım
 
Moderatör tarafında düzenlendi:

mes9446

Yeni üye
10 Haz 2014
3
0
*******************Ders 2********************
Arange​
İstediğimiz sayılar arasında,istediğimiz shape e sahip bir matris oluşturur.
Kod:
A=np.arange(0,10,2)
Sıfırdan başla, 10 a kadar git. 2şer 2şer atla dedik.3.parametre opsiyonel.
Linspace​
Arange gibi verilen sayı aralığında bir matris üretmeye yarar. Parametreler farklıdır.
Kod:
np.linspace(0,10,20)
0dan başla,10 a kadar olsun sayı aralığım. 20 sayı üret. Yani 20 elemanlı bir matris.
Not: Arange de 2. parametredeki sayı dahil değildi.Linspacede dahil
Np.Random
Random sayılardan oluşan matris üretmede kullanılır.
Kod:
np.random.random((3,3))
Bu da parametre olarak shape alır. Değerleri 0 ile 1 arasında olan 3x3 lük bir matris oluşturur.
Empty
Bellekte neredeyse hiç denecek kadar az yer kaplayan sayılarla doldurur.
Kod:
np.empty((2,4))
np.reshape​

Array ın shape ini belirlemeyi, değiştirmeyi sağlar. Bir örnekle hem reshape kullanalım,hem de order parametresini tanıtalım.

Order parametresi de,girilen 2 köşeli parantezin arasındakilerin satır satır mı sütun sütun mu sıralanacağını belirlemenizi sağlar. order='C' veya 'F' kullanabilirsiniz. C klasik stili kast eder, F de fortran usulünü.

Kod:
z=np.array([[1,2,3],[4,5,6]]) #Arrayimizi oluşturduk
z=z.reshape((3,2)) #2x3 lük matrisimizi 3x2 lik hale getirmesini istedik. default hali order='C' dir. o yüzden c yi hiç yazmadık.
print(f"Order C: \n {z}")
z=z.reshape((3,2),order='F')
print(f"Order F: \n {z}")
Çıktımız şu şekilde;
Arrayin normal hali:
[1 2 3]
[4 5 6]]
Order C:
[[1 2]
[3 4]
[5 6]]
Order F:
[[1 5]
[4 3]
[2 6]]

Matrisin izini bulma (Trace)
Köşegendeki sayıların toplamına matrisin izi denir.
Kod:
np.trace(array_adi)
Eigen Matris Hesaplama
Lineer cebirin konularından biri, makine öğrenmesi algorimalarından birinde kullanılıyordu yanlış hatırlamıyorsam.
Kod:
np.linalg.eig(array_adi)
şeklinde kullanılır.

Matrisi Parçalama (Slicing İşlemi)
Matrisin örneğin sadece 2. satırını, 3. sütununu almak isteyebiliriz. Burada listelerdekiyle aynı mantıkta bölütleme yapabiliriz.
Kod:
A=np.arange(0,12).reshape((3,4)) #0dan 12 ye kadar giden 3 satır 4 sütundan oluşan bir matris oluşturdum.
print(A) #Matrisimizi görelim.
B=A[:,2] #2.sütunu komple alalım.
print("\n")
print(B)
C=A[1,:] #1.satırı komple alalım.

print("\n")
print(C)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]



-----B-----
[ 2 6 10]


-----C-----
[4 5 6 7]

Where
where parametre olarak condition alır. Parantezin içine yazdığınız ifadeyi sağlayan değer(ler)in indexini liste olarak döndürülür.

Örnek üzerinden pekiştirelim kullanımını,
Kod:
yeni_a=np.where(A>6) #yukarıdaki 3x4 lük A matrisini kullanmaya devam ediyoruz.

print(yeni_a)
(array([0, 0, 0, 0, 1, 1], dtype=int64), array([0, 1, 2, 3, 0, 1], dtype=int64))
Böyle bir çıktı üretti program bize. Ne demek yorumlayalım. İlk satırdaki arrayin ilk indexi ne,0. diğer arrayin ilk indexi ne, o da 0. A[0,0],A[0,1],A[0,2].... hepsi 6dan küçük sayıları depoluyor. Yani ilk arrayda satır no,2.arrayda sütun no indexini taşıyor.
Bir kullanım daha var where nin.

Kod:
[SIZE=3] B=np.where(A<6,A,20) #A arrayında 6dan küçük sayıları al.6ya eşit veya büyük sayıların yerine de 20 yaz ve bu B arrayımız olsun.[/SIZE]
print(B)
[[ 0. 1. 2. 3.]
[ 4. 5. 20 20]
[20 20 20 20]]
Matrislerde İşlemler
-Toplama
İki matrisin toplanması, her indisteki elemanın eş indisindekiyle olur. yani A ve B matrislerini toplayacaksak, A[0,0] ile B[0,0] toplanabilir. Yani satır ve sütun sayıları eşit değilse toplama yapamayız.
Bir b matrisi oluşturalım ve toplama,çıkarma işlemlerini yapalım.

Kod:
B=np.random.random((3,4)) #Aynı satır ve sütun sayısında ,0 ile 1 arasında değerleri olan bir matris oluşturduk.


print(A+B)
print(np.add(A,B)) # ikisi de aynı işlevi görmekte. 

print(A-B) # Çıkarma işlemi de aynı şekilde çalışır.
Çarpma
Gelelim çarpmaya. Matrislerde çarpma işlemi biraz farklı. İlk matrisin 0. satırıyla, ikinci matrisin 0.sütunundaki elemanlar çarpılır. Yani A[0,0] ile B[0,0] sonra A[0,1] ile B[1,0] ,A[0,2] ile B[2,0] çarpılır, tüm çarpımlar toplanır yeni matrisin [0,0] elemanı olur.
Kodlamasına gelelim,

Kod:
A@B
A.dot(B)
np.dot(A,B)
Transpoze alma,
Kod:
A.T
Bir Matrisin Tersini Alma,
Kod:
np.linalg.inv(A)
Matrisler aslında satır sayısı kadar denklemdir. Şu görselle ifade etmeye çalışalım,
opNDjh.png

ilk satır 2x+3y=11 , ikinci satır x+2y=6 dır. buradan taraf tarafa toplama,yok etme gibi methodlarla denklemler tek bilinmeyene düşürülür ve x,y ikilisi bulunur. Fakat bu 10 satırlık bir matris olsaydı, okadar kolay bulabilecek miydik? Sanmıyorum. Bunu bizim yerimize numpy çözüyor.


Kod:
x=np.array([[2,3],[1,2]])
y=np.array([11,6])
cozum=np.linalg.solve(x,y)
print(cozum)
yani x=4 y=1 imiş.

Matrisi düzleştirme
Örneğin 3x3 lük bir matrisimiz var totalde 9 eleman. biz bunu tek liste haline getirebiliyoruz.
Kod:
matrix1=np.arange(0,9).reshape((3,3))
print(matrix1)
duz_matris=matrix1.flatten()
alternatif_matris=matrix1.ravel() #ikisi de aynı işi yapıyor.
print(duz_matris) 

print(list(duz_matris)) # list türüne cast ettik.
[0, 1, 2], [3, 4, 5], [6, 7, 8]

[0, 1, 2, 3, 4, 5, 6, 7, 8]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
Resize ve Reshape
İkisi de matrisin shape ini değiştiriyor. Üstte 3x3 lük bir matrisimiz var, bunu 1x9 luk yapalım. Yani tek satır, 9 sütun.
Kod:
matrix1.resize((1,9))
print(matrix1)

matrix1.reshape((1,9))
print(matrix1)
[FONT=&quot]
[[0, 1, 2, 3, 4, 5, 6, 7, 8]]​
[/FONT][[0, 1, 2], [3, 4, 5], [6, 7, 8]]
İlk fonksiyon istediğimiz işi yaptı ama ikincisi yapmamış. Sebebi, ilki parametre olarak pointer ile arrayi alıyor.İkincisi ise fonksiyonda yeni bir array oluşturuyor,onu döndürüyor. Bu yüzden reshape nin kullanılabilmesi için onu bir değişkene atamamız gerek. Yapalım
Kod:
b=matrix1.reshape((1,9))
print(b)
[FONT=&quot]
-[[0, 1, 2, 3, 4, 5, 6, 7, 8]]-

[/FONT]
İşlem tamam.
Matris birleştirme-
Kod:
A=np.arange(0,4).reshape((2,2))
B=np.arange(4,8).reshape((2,2))
print(np.concatenate([A,B]))
[[0 1] [2 3] [4 5] [6 7]]
Gördüğünüz gibi, alt alta koydu 2 matrisi de.concatenate([B,A]) deseydik B matrisi üstte olacaktı. Peki sadece alt alta mı dizebiliyoruz,tabiki hayır.
Kod:
yan_yana=np.hstack([A,B])
print(yan_yana)
[[0 1 4 5] [2 3 6 7]]
Yanyana (hohrizontal stack) ile dizdik. Bu arada, concatenate in alternatifi de,np.vstack tir. İsterseniz onu da kullanabilirsiniz :)
Bir teknik mülakatta bunları söyleyerek rakiplerinizin önüne geçebilirsiniz.


Split ile Matrisi 2 matris haline getirme
yan_yana matrisimizi eski haline getirelim.
Kod:
ilk_matris,ikinci_matris=np.split(yan_yana,[2],axis=1) #return olarak 2 array veriyor split fonksiyonu. o yüzden 2 sayı girdik. ilk parametresi bölünecek array, 2.parametre kaçıncı indisten itibaren bölünecek,3.parametre de axis=0 dikey böl, 1 yatay böl.

print(ilk_matris)
print(ikinci_matris)
[[0 1] [2 3]]

[[4 5] [6 7]]

Vsplit ve hsplit ile axis parametresine gerek kalmadan da uygulayabiliyoruz.

Eksik Değerler(missing values)
Bazen veri setimizde bazı haneler boş kalmış olabilir. oranın bir değeri olmayabilir. numpy ın bu tür durumlar için, orada sayı olmadığını programa tanıtmamıza olanak sağlayan bir özelliği var.

Kod:
A=np.array([1,np.nan])#not a number sayı yok yani burada dedik.
B=np.array([2,np.inf]) #infinite de sonsuz demek. Bazen sonsuz sayı değerini kullanmamız gerekebilir.Ek bilgi olsun :)
Unique
Bazen matrislerde birden fazla aynı sayı tekrar ediyor olabilir ve siz bu sayıları sadece bir defa görmek istiyor olabilirsiniz. Bu durumda unique fonksiyonu çok işinize yarayacak,gerçi set(küme) mantığıyla calısıyor ama hangi sayı kaç defa tekrar ediyor bunu da görebilirsiniz.

Kod:
A=np.array([1,2,2,3,4,4,1,5,3]) #şeklinde tekrar eden sayılardan oluşan bir matris tanımladık.
B=np.unique(A,return_counts=False)
print(B)

Tekrarsız biçimde yazdı.Bir sayı kaç defa tekrar ediyor onu görmek istersek peki?

Kod:
A=np.array([1,2,2,3,4,4,1,5,3]) 
B,C=np.unique(A,return_counts=True)
print(B)
print(C)
[1 2 3 4 5] [2 2 2 2 1]

Tahmin edebileceğiniz üzre 2.liste üstteki listedeki aynı indisteki eleman kaç defa tekrar etmiş. Yani ikinci listenin 3. indisinde 2 yazıyor. 1.listenin 3 ünde 4 yazıyor. 4 sayısı 2 defa tekrar etmiş..
 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.