Bilişim dünyasına kaliteli, özgün ve Türkçe içerikler kazandırmayı hedefleyen bir platform..

friends friends friends

Numpy

Numpy

NumPy, Numerical yani Sayısal Python ‘un kısaltılmış halidir. Büyük Veriler ve saklama işlemleri için kullanılan bir kütüphanedir. Diziler ve dizi ile çalışan matematiksel işlemler için kullanılır. Dizi tabanlı data setlerin oluşturulması , okunması, yazılması ve sıralanması ,Rastgele sayı üretimi

Numpy array leri Python listelerine benzer fakat işlevsellik bakımından daha avantajlıdır. Numpy, çok boyutlu dizilerle(matrisler ile) çalışma imkanı sağladığı ve python listelerinden daha hızlı olduğu için data science alanında genellikle Numpy kütüphanesi kullanılmaktadır

NumPy Kütüphanesi Kullanımı

# NumPy kütüphanesi çağırma
import numpy as np#kütüphanemizi np isminde çağırma

python list ve numpy array tanımlama

# python list
python_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# numpy array
numpy_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
type(numpy_array)#numpy.ndarray

Dizi Tipi-dtype

Numpy dizileri tek bir tip tutarlar,Eğer ondalıklı bir sayı varsa diğer elemanlarda ondalıklı sayılara çevrilecektir.


dizi=np.array([3.14,2,5])
#[3.14,2.0,5.0]
#ancak bu tip değerlerini istediğimiz gibi belirleyebiliriz
dizi=np.array([3.14,2,5],dtype="int")
#[3,2,5]

dizi=np.array([3.14,2,5],dtype="float32")
#[3.14,2.0,5.0]

Sıfırdan array oluşturma


np.zeros(10,dtype=null)
#array([0,0,0,0,0,0,0,0,0,0,0])

#1'lerden oluşan 3 satır 5 sutundan oluşan bir dizi oluşturmak
np.ones((3,5))
array([[1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1.]])


import numpy as np
np.ones((3,5),dtype="int")
array([[1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1]])

#İstediğimiz sayılardan oluşturmak için, 3 satır 5 sutun, 3 rakamından oluşan
np.full((3,5),3)
array([[3, 3, 3, 3, 3],
       [3, 3, 3, 3, 3],
       [3, 3, 3, 3, 3]])

np.arange(0,31,3)#0'dan 31'e kadar 3'er artış ile doğrusal bir dizi oluşturma
#array([ 0,  3,  6,  9, 12, 15, 18, 21, 24, 27, 30])


np.linspace(0,1,10)# 0 ile 1 arasında 10 tane değer oluştırma
#array([0.        , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
       0.55555556, 0.66666667, 0.77777778, 0.88888889, 1.        ])

np.random.normal(10,4,(3,4))#Ortalaması 10, standart sapması 4, 3 sutun 4 satır
#array([[ 8.9640767 ,  5.32428128, 12.24704316, 11.29915591],
       [ 9.20441823, 13.63961834,  5.73419634, 13.13437315],
       [ 8.70646368, 15.64330403,  2.41803587,  7.28691167]])

np.random.randint(0,10,(3,3))#Int sayılardan oluşan,3 satır 3 sutundan oluşan
#array([[5, 6, 4],
       [2, 1, 1],
       [2, 0, 2]])

Dizinin boyutunu bulmak-ndim

numpy_array1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numpy_array1.ndim)
Output:
1
numpy_array2 = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
print(numpy_array2.ndim)
Output:
2

np.sort()

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))
#[0 1 2 3]
#2 boyutlu dizilerde
np.sort(arr,axis=1)

np.split(Ayırma)

arr = np.array([1, 2, 3, 4, 5, 6])

newarr = np.array_split(arr, 3)

print(newarr)
#[array([1, 2]), array([3, 4]), array([5, 6])]

#vsplit ve hsplit

np.slice(Bölme)

arr = np.array([1, 2, 3, 4, 5, 6, 7])

print(arr[1:5])
#[2 3 4 5]

Dizinin satır ve sütun sayısını bulmak-shape

numpy_array1 = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numpy_array1.shape)
print(numpy_array1.ndim)
#10 tane elemandan oluşan 1 boyutlu bir dizi(vektör).
Output:
(10,)
1
numpy_array2 = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
print(numpy_array2.ndim)
print(numpy_array2.shape)
# 1 satır ve 10 sütundan oluşan 2 boyutlu bir dizi(matris).
Output:
(1, 10)
2

Dizinin satır ve sütun sayısını değiştirmek-reshape(satır,sutun)

Numpy array’i yeniden şekillendirmek istediğimizde yani satır ve sütun sayısını değiştirmek istediğimizde reshape() metodunu kullanabiliriz.

numpy_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numpy_array.reshape(1,10))
Output : 
[[0 1 2 3 4 5 6 7 8 9]]
print(numpy_array.reshape(10,1))
Output:
  [[0]  
   [1]
   [2]  
   [3]
   [4]
   [5]  
   [6]  
   [7]
   [8]
   [9]]
print(numpy_array.reshape(5,2))
Output:
  [[0 1]  
   [2 3]
   [4 5]
   [6 7]
   [8 9]]
print(numpy_array.reshape(2,5))
Output:
  [[0 1 2 3 4] 
   [5 6 7 8 9]]

Not : Orijinal matris ve yeniden şekillendirilen matris aynı sayıda elemana sahip olmalıdır.
Başlangıçta numpy_array nesnemizin şekline baktığımızda(10,) olduğunu görmüştük ve bu bize numpy_array nesnemizin tek boyutlu bir vektör olduğunu söyler. reshape(10,1) metodunu kullandığımızda ise artık numpy_array nesnemiz 10 satır ve 1 sütundan oluşan 10x1 lik 2 boyutlu bir matrise dönüşmüştür.

np.arange()

np.arange() →Python’daki range() fonksiyonuna benzer. Belirtilen başlangıç değerinden başlayıp, her seferinde adım sayısı kadar arttırarak , bitiş değerine kadar olan sayıları bulunduran bir numpy dizisi dödürür. Not: Bitiş değerinin diziye dahil edilmediğine dikkat edelim.
Genel kullanım :
np.arange(başlangıç,bitiş,adım sayısı)
np.arange(bitiş) → bu kullanımda default başlangıç değeri 0 , adım sayısı ise 1 olarak kabul edilir.
Yani aslında yukarıda ki formatta ifade edecek olursak np.arange(0,bitiş,1) şeklinde yazabiliriz.

np.arange(0,10,3)
Output:
array([0, 3, 6, 9])
np.arange(10)
Output:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(0,10,1)
Output:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Dizinin elemanlarını seçmek

Diziden ihtiyacımız olan eleman veya elemanları nasıl elde edeceğimize bakalım
Genel kullanım : ndarray[rows,columns]
Not: ndarray[:,:] → buradaki “:” kullanımı tüm satır ve sütunları seçmemizi sağlar.

numpy_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(5,2)
print(numpy_array)
Output:
  [[0 1]  
   [2 3]
   [4 5]
   [6 7]
   [8 9]]
#Dizinin herhangi bir satırını seçmek
#1.satır
first_row = numpy_array[0]
#1. ve 2. satır 
first_and_second_rows = numpy_array[0:2]
print(first_row)
print(first_and_second_rows)
Output:
[0 1]
[[0 1]  [2 3]]
#Dizinin herhangi bir kolonunu seçmek
#1. sütun
first_column = numpy_array[:,0]
#1. ve 2. sütun
first_and_second_column = numpy_array[:,0:2]
print(first_column)
print(first_and_second_column)
Output:
[0 2 4 6 8]
[[0 1] 
 [2 3]
 [4 5] 
 [6 7] 
 [8 9]]
#Dizinin herhangi bir elemanını seçmek
selecting_item = numpy_array[3,1]
print(selecting_item)
Output:
7

Diziyi ters çevirmek

numpy_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(5,2)
print(numpy_array)
Output:
[[0 1] 
 [2 3] 
 [4 5] 
 [6 7] 
 [8 9]]
print(numpy_array[::-1])
Output:
[[8 9]  
 [6 7]
 [4 5] 
 [2 3] 
 [0 1]]

Matrisleri birleştirmek

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(5,2)
#Satır bazlı birleştirme, varsayılan olarak axis=0
print(np.concatenate([numpy_array, numpy_array], axis =0))
Output:
[[0 1] 
 [2 3] 
 [4 5] 
 [6 7] 
 [8 9] 
 [0 1] 
 [2 3] 
 [4 5] 
 [6 7] 
 [8 9]]
#Sütun bazlı birleştirme
print(np.concatenate([numpy_array, numpy_array], axis =1))
Output:
[[0 1 0 1] 
 [2 3 2 3] 
 [4 5 4 5] 
 [6 7 6 7] 
 [8 9 8 9]]

sum(toplam), max ve min değerlerini hesaplamak

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(5,2)
print(numpy_array)
Output:
[[0 1] 
 [2 3] 
 [4 5] 
 [6 7] 
 [8 9]]
print(numpy_array.max())
Output:9
print(numpy_array.min())
Output:0

print(numpy_array.sum())
Output:45
#Satırların toplamı
print(numpy_array.sum(axis = 1))
Output:  
[ 1  5  9 13 17] 
#Sütunların toplamı
print(numpy_array.sum(axis = 0))
Output:
[20 25]

mean, median, varyans ve standart sapma hesaplamak

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
print(numpy_array.mean())
Output:4.5
print(np.median(numpy_array))
Output:4.5
print(numpy_array.var())
Output:8.25
print(numpy_array.std())
Output:2.8722813232690143

!!! Median kullanımının diğerlerinden farklı olduğu dikkatinizi çekmiş olabilir. Bunun sebebi ndarray nesnesinin np.median(ndarray) fonksiyonuna sahip olması fakat ndarray.median() metoduna sahip olmamasıdır.

Matrislerde aritmetik işlemler

Matrislerden hatırlayacağımız üzere toplama, çıkarma vb. işlemler yapabilmek için işlem yapılacak matrislerin satır ve sütun sayılarının eşit olması gerekiyordu.

numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(3,3)
#dizimizi 3x3 lük, 2 boyutlu bir matrise dönüştürdük.
print(numpy_array)
Output:
[[1 2 3] 
 [4 5 6] 
 [7 8 9]]
print(numpy_array + numpy_array)
Output:
[[ 2  4  6] 
 [ 8 10 12] 
 [14 16 18]]
print(numpy_array - numpy_array)
Output:
[[0 0 0] 
 [0 0 0] 
 [0 0 0]]
print(numpy_array * numpy_array)
Output:
[[ 1  4  9] 
 [16 25 36] 
 [49 64 81]]
print(numpy_array / numpy_array)
Output:
[[1  1  1]
 [1  1  1]
 [1  1  1]]
print(numpy_array + 5)
Output:
[[ 6  7  8] 
 [ 9 10 11] 
 [12 13 14]]
print(numpy_array * 2)
Output:
[[ 2  4  6] 
 [ 8 10 12] 
 [14 16 18]]

Özel foksiyonlar ile işlemler

Numpy toplama, çıkarma gibi basit matematiksel işlemlerin yanında trigonometrik, logaritmik,üstel fonksiyonlar… gibi daha kompleks fonksiyonlarla da çalışma imkanı sağlar.

numpy_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(3,3)
#dizimizi 3x3 lük, 2 boyutlu bir matrise dönüştürdük.
print(np.sin(numpy_array))
Output:
[[0.84147 0.9093 0.14112]
 [-0.7568 -0.95892 -0.27942] 
 [0.65699 0.98936 0.41212]]
print(np.cos(numpy_array))
Output:
[[0.5403 -0.41615 -0.98999]
 [-0.65364 0.28366 0.96017] 
 [0.7539 -0.1455 -0.91113]] [
print(np.sqrt(numpy_array))  
Output:  
[[ 1 1.4142 1.7321]
 [ 2 2.2361 2.4495]
 [2.6458 2.8284 3]]
print(np.exp(numpy_array))
Output:
[[2.7183 7.3891 20.086]
 [54.598 148.41 403.43]
 [1096.6 2981 8103.1]]
print(np.log(numpy_array))
Output:
[[ 0 0.69315 1.0986] 
 [1.3863 1.6094 1.7918]
 [1.9459 2.0794 2.1972]]

Matrislerin çarpımı

Bu bölüme ,iki matris çarpılırken ilk matrisin sütun sayısının ikinci matrisin satır sayısına eşit olması gerektiğini hatırlayarak başlayalım.

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array1 = numpy_array.reshape(5,2)
numpy_array2 = numpy_array.reshape(2,5)
print(np.dot(numpy_array1,numpy_array2))
Output:
[[  5   6   7   8   9] 
 [ 15  20  25  30  35] 
 [ 25  34  43  52  61] 
 [ 35  48  61  74  87] 
 [ 45  62  79  96 113]]

Matrisin transpozu

Matrisin satırlarını sütun, sütunlarını satır yapma işlemi numpy ile “ .T” yazmak kadar kolay.

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
numpy_array = numpy_array.reshape(5,2)
print(numpy_array)
Output:
[[0 1] 
 [2 3] 
 [4 5] 
 [6 7] 
 [8 9]]
print(numpy_array.T) 
Output:
[[0 2 4 6 8] 
 [1 3 5 7 9]]

Numpy’da Koşul İfadeleri ile Çalışmak

Numpy bize if-else bloğu kullanmamıza gerek kalmadan belirli bir koşulu sağlayan dizi elemanlarıyla çalışma imkanı sağlar. Klasik numpy_array nesnemizi kullanarak nasıl yapılacağına göz atalım:

numpy_array = np.array([0,1, 2, 3, 4, 5, 6, 7, 8, 9])
boolean_array = numpy_array >= 5
print(boolean_array)
Output :
[False False False False False  True  True  True  True  True]

Yukarıda gördüğümüz boolean_array dizisi bize numpy_array dizimizin elemanlarının belirtilen koşulu sağlayıp sağlamadığını True-False olarak gösteriyor. İyi güzel de, benim listemdeki hangi elemanlar bu koşulu sağlıyor ??? Numpy ın güzelliğide burada ortaya çıkıyor çünkü numpy bize bu boolean dizisini index olarak kullanarak koşulu sağlayan elemanlara ulaşmamızı sağlıyor:

# 5 ve 5'ten büyük elemanlar
print(numpy_array[boolean_array])
Output:
[5 6 7 8 9]
# 5 ten küçük elemanlar
print(numpy_array<5)
print(numpy_array[numpy_array<5])
Output:
[ True  True  True  True  True False False False False False]
[0 1 2 3 4]

Link Link2 Link3

numpy transpoz matris
0 Beğeni
Makine Öğrenmesi
Önceki Yazı

Logistic Regresyon(Sınıflandırma)

10 Nis. 2020 tarihinde yayınlandı.
Sonraki Yazı

Pandas

10 Nis. 2020 tarihinde yayınlandı.
arrow