NumPy Nedir? Python NumPy Kütüphanesinin Kullanımı

Can Yüksel

Erdoğancan Yüksel

8 dakika 11 saniye okuma süresi

NumPy, Python programlama dilinde bilimsel hesaplamalar ve veri analizi için kullanılan güçlü bir kütüphanedir. NumPy kullanılarak Python'da veri manipülasyonu ve matematiksel işlemler verimli bir şekilde yapılabilmektedir.

numpy-nedir

NumPy Nedir?

NumPy, dizilerle çalışmak için oldukça yaygın olarak kullanılan verimli bir Python kütüphanesidir. NumPy (Numerical Python) çok boyutlu diziler ve matrisler üzerinden matematiksel işlemler yapabilmemizi sağlayan ve bu işlemlerin çıktılarını oldukça hızlı bir şekilde sunan bir Python kütüphanesidir.

Python kullanarak mevcutta diziler üzerinde işlemler yapılabilmektedir fakat bu işlemler NumPy ile yapıldığında 50 kata kadar daha hızlı sonuçlandırılabilmektedir. NumPy'da dizi nesneleri ndarray olarak adlandırılmaktadır. NumPy dizileri, listelerden farklı olarak bellekte sürekli bir yerde saklanmaktadır. Bu sayede dizi elemanlarına çok verimli bir şekilde erişilebilir ve değiştirilebilir. NumPy bir Python kütüphanesidir. Kısmen Python ile yazılmış olsa da hızlı hesaplama gerektiren kısımların çoğu C veya C++ ile yazılmıştır ve doğrudan Python dilinin bir parçası değildir. Bu nedenle NumPy kütüphanesinin ayrıca kurulması ve program içerisinde tanımlanması gerekmektedir.

NumPy Kurulumu

Komut sistemini açtıktan sonra ve aşağıdaki kodu komut satırına yazıyoruz. Kurulumun sağlanması için bilgisayarda Python'ın yüklü olması gerekmektedir.

pip install numpy

Eğer bilgisayarda Anaconda yüklü ise ve NumPY kütüphanesi burada kullanılmak isteniyor ise aşağıdaki komut Anaconda Prompt üzerinden çalıştırılmalıdır.

conda install numpy

NumPY Kütüphanesinin Tanımlanması

NumPy kütüphanesi Python projelerinde aşağıdaki şekilde tanımlanabilmektedir:

import numpy

Diğer bir tanımlama şekli de en yaygın şekilde kullanılan np takma adı ile tanımlanmasıdır:

import numpy as np

NumPy Dizisi Oluşturma

NumPy dizilerinde dizi nesneleri ndarray olarak tanımlanmaktadır. array() fonksiyonu kullanılarak NumPy ndarray nesnesi oluşturulabilmektedir.

Kod örneği:

import numpy as np 
 array = np.array([1,2,3,4,5]) 
 print(array) 
 # Output:
 [1 2 3 4 5]

Çok boyutlu diziler oluşturmak için kod örneği:

import numpy as np 
 #2 boyutlu dizi örneği: 
 array2Dimension = np.array([[1, 2], [3, 4]]) 
 print(array2Dimension) 
 Output: 
 [[1 2]
 [3 4]]
 #3 boyutlu dizi örneği:
 array3Dimension = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
 print(array3Dimension)
 # Output:
 [[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

Dizilerde boyut sayısını bulmak için ndim özelliği kullanılmaktadır:

import numpy as np 
 array1Dimension = np.array([1,2,3,4,5])
 array1Dimension.ndim
 # Output:
 1
 array2Dimension = np.array([[1, 2], [3, 4]]) 
 array2Dimension.ndim  
 # Output: 
 2
 array3Dimension = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
 array3Dimension.ndim
 # Output:
 3

Çok boyutlu diziler tanımlamak için ise ndmin özelliği kullanılmaktadır:

import numpy as np 
 nDimensionArray = np.array([1,2,3,4], ndmin = 3)
 nDimensionArray
 Output:
 array([[[1, 2, 3, 4]]])

Bir dizinin veri türünü kontrol etmek için ise dtype özelliği kullanılmaktadır:

import numpy as np

intArray = np.array([1, 2, 4, 5, 6])
stringArray = np.array(["Barış", "Can", "Emre"])
floatArray = np.array([1.25, 2.35, 4.56])
booleanArray = np.array([True, False, False, True])

intArray.dtype
# Output:
dtype('int64')

stringArray.dtype
# Output:
dtype('<U5')

floatArray.dtype
# Output:
dtype('float64')

booleanArray.dtype
# Output:
dtype('bool')

Bir dizinin satır ve sütun sayısını bulmak için ise shape özelliği kullanılmaktadır:

import numpy as np

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

array1.shape
# Output:
(5,)

array2.shape
# Output:
(2, 4)

NumPy arange() Fonksiyonu

Python'daki range fonksiyonuna benzemektedir. Belirtilen aralıkta eşit aralıklı değerler döndürmektedir. Fonksiyon yapısı arange(start,stop,step) şeklindedir. Başlangıç değeri diziye dahil edilirken bitiş değeri dahil edilmez. Belirtilen başlangıç, bitiş ve aralıklara uygun dizide eleman yok ise boş array dönmektedir. Kod örneği:

import numpy as np

array1 = np.arange(5)
array1
# Output:
array([0, 1, 2, 3, 4])

array2 = np.arange(5, 10)
array2
# Output:
array([5, 6, 7, 8, 9])

array3 = np.arange(0, 20, 6)
array3
# Output:
array([ 0,  6, 12, 18])

np.arange(4,1,20)
# Output:
array([])

NumPy random() Fonksiyonu

random() fonksiyonu belirtilen adet ve boyutta rastgele sayılar üretir. Üretmek istediğimiz sayı tipine göre fonksiyonu çağırabilmekteyiz. Kod örnekleri:

import numpy as np

# 0 ile 1 arasında rastgele ondalık sayı üretir:
np.random.random(4)
# Output:
array([0.0470988 , 0.03309829, 0.01583403, 0.53603268])

# Normal dağılımda rastgele negatif ve pozitif ondalık sayılar üretir:
np.random.randn(8)
# Output:
array([ 1.98291619,  0.9086764 , -0.64685367,  0.20763675,  0.45527383, -0.49146823, -1.84864411,  0.56043281])

# 10 dahil olmamak üzere 1-9 arasındaki rakamlardan bir adet döner
np.random.randint(1, 10)
# Output:
6

# 10 dahil olmamak üzere 1-9 arasındaki rakamlardan beş adet döner
np.random.randint(1, 10, 5)
# Output:
array([9, 5, 7, 4, 3])

NumPy zeros() ve ones() Fonksiyonları

zeros() fonksiyonu belirtilen satır ve sütun sayısına göre 0(sıfır) rakamlarından oluşan array döndürür. ones() fonksiyonu ise 1(bir) rakamlarından oluşan array döndürür. Kod örneği:

import numpy as np

np.zeros(5)
# Output:
array([0., 0., 0., 0., 0.])

np.zeros((2, 3))
# Output:
array([[0., 0., 0.],
       [0., 0., 0.]])

np.ones(3)
# Output:
array([1., 1., 1.])

np.ones((2, 6))
# Output:
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])

NumPy linspace() Fonksiyonu

linspace() fonksiyonu iki değer arasında eşit aralıklı değerler oluşturmaktadır. Adet girilmez ise default adet değeri 50'dir. Kod örneği:

import numpy as np 
 np.linspace(0,20,6)
 # Output:
 [1 2 3 4 5]
 array([ 0.,  4.,  8., 12., 16., 20.])

NumPy eye() Fonksiyonu

eye() fonksiyonu girilen değer doğrultusunda birim matris oluşturmaktadır. Kod örneği:

import numpy as np

np.eye(3)
# Output:
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

np.eye(4)
# Output:
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

NumPy any() Fonksiyonu

any() fonksiyonu girilen bir şartın dizi içerisinde sağlanıp sağlanmadığını kontrol etmektedir. Kod örneği:

import numpy as np

array = np.array([-5, 1, 3, 4, 8, 10])
np.any(array < 0)
# Output:
True

np.any(array > 10)
# Output:
False

NumPy shape() ve reshape() Fonksiyonları

shape() fonksiyonu dizi boyutlarının uzunluklarını çıktı olarak vermektedir. reshape() fonksiyonu ise diziyi belirlediğimiz değerler doğrultusunda boyutlandırmaktadır. Kod örneği:

import numpy as np

array1D = np.arange(0, 10, 2)
array1D
# Output:
array([0, 2, 4, 6, 8])

np.shape(array1D)
# Output:
(5,)

array2D = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array2D
# Output:
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

np.shape(array2D)
# Output:
(3, 3)

myNumpyArray = np.arange(30)
myNumpyArray.reshape(5, 6)
# Output:
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, 27, 28, 29]])

NumPy max(), argmag() ve min(), argmin() Fonksiyonları

max() fonksiyonu dizinin en büyük elemanını, argmax() ise en büyük elemanın index'ini bulmaktadır. min() fonksiyonu ise dizinin en küçük elemanını, argmin() ise en küçük elemanın index'ini bulmaktadır. Kod örneği:

import numpy as np

array = np.random.randint(0, 30, 10)
array
# Output:
array([16, 28, 25,  4, 26, 24, 14, 13, 15, 10])

array.max()
# Output:
28  # Dizinin en büyük elemanı

array.argmax()
# Output:
1  # 28 dizinin en büyük elemanı olup index'i 1'dir

array.min()
# Output:
4  # Dizinin en küçük elemanı

array.argmin()
# Output:
3  # 4 dizinin en küçük elemanı olup index'i 3'tür

NumPy cumsum() Fonksiyonu

cumsum() fonksiyonu dizi elemanlarını kümülatif olarak toplanmasını sağlamaktadır. Kod örneği:

import numpy as np

array = np.random.randint(0, 30, 10)
array
# Output:
array([16, 28, 25,  4, 26, 24, 14, 13, 15, 10])

array.cumsum()
# Output:
array([ 16,  44,  69,  73,  99, 123, 137, 150, 165, 175])
# [16, (16 + 28), (44 + 25), (69 + 4), (73 + 26), (99 + 24), (123 + 14), (137 + 13), (150 + 15), (165 + 10)]

NumPy copy() Fonksiyonu

copy() fonksiyonu dizi elemanların yeni atanan diziye kopyalanmasını sağlamaktadır. Böylelikle işlem yapılmak istenilen array ile ana array birbirinden bağımsız hale getirilebilir. Kod örneği:

import numpy as np

array = np.arange(0, 15)
array
# Output:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

copyArray = array.copy()
copyArray
# Output:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

np.random.shuffle(copyArray)  # copyArray'in elemanlarını rastgele karıştırdık.
copyArray
# Output:
array([ 6, 13,  3,  7, 14,  1,  4, 10,  9, 11, 12,  5,  8,  2,  0])

array
# Output:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

NumPy sqrt() ve square() Fonksiyonları

sqrt() fonksiyonu dizi elemanlarına kök alma işlemi uygulamaktadır. square() fonksiyonu ise dizinin her bir elemanının karesini almaktadır. Kod örneği:

import numpy as np

array = np.arange(1, 15)
array
# Output:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

np.sqrt(array)
# Output:
array([1.        , 1.41421356, 1.73205081, 2.        , 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        , 3.16227766, 3.31662479, 3.46410162, 3.60555128, 3.74165739])

np.square(array)
# Output:
array([  1,   4,   9,  16,  25,  36,  49,  64,  81, 100, 121, 144, 169, 196])

NumPy Dizilerinin Indexlenmesi

NumPy'da array elemanlarının indexlenmesi Python'daki liste indexleme ile aynıdır. Kod örneği:

import numpy as np

array = np.arange(0, 15)
array
# Output:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

array[5]
# Output:
5

array[3:5]
# Output:
array([3, 4])  # Üçüncü index'ten dördüncü index'e kadar çıktı verir.

array[3:8]
# Output:
array([3, 4, 5, 6, 7])  # Üçüncü index'ten yedinci index'e kadar çıktı verir.

array[3:8] = -5
array
# Output:
array([ 0,  1,  2, -5, -5, -5, -5, -5,  8,  9, 10, 11, 12, 13, 14])  # Üçüncü index'ten yedinci index'e kadar -5 ataması yapar.

array[:] = 50
array
# Output:
array([50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50])

Bazı veri listelerinde şartı sağlamayan veya şartı sağlayan elemanlara 0 ve 1 ataması yapmak için ise oluşturulan diziler belirli bir şart doğrusunda listelenebilir. Şartı sağlayan elemanlar True , sağlmayan elemanlar ise False olarak geri döndürülmektedir. Kod örneği:

import numpy as np

array = np.random.randint(1, 100, 20)
array
# Output:
array([51, 86, 31, 46, 39, 54, 81, 50, 41, 14, 21,  1, 80, 74, 21, 12, 48,
       30, 87, 83])

array > 24
# Output:
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
       False, False, False,  True,  True, False, False,  True,  True,
        True,  True])

NumPy Dizilerinde Toplama, Çıkarma, Çarpma ve Bölme İşlemleri

NumPy diziler üzerinde matematiksel işlemler yapmayı oldukça kolaylaştırmaktadır. Dizi elemanları üzerinde toplama, çıkarma, çarpma ve bölme işlemli NumPy ile kolaylıkla yapılabilmektedir. Kod örneği:

import numpy as np

array = np.arange(0, 15)
array
# Output:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

array + array
# Output: # Dizi elemanlarını kendisi ile toplar.
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28])

array + 15
# Output: # Dizinin her bir elemanına 15 ekler.
array([15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])

array * array
# Output: # Dizinin her bir elemanını kendisi ile çarpar.
array([  0,   1,   4,   9,  16,  25,  36,  49,  64,  81, 100, 121, 144, 169, 196])

array * 15
# Output: # Dizinin her bir elemanını 15 ile çarpar.
array([  0,  15,  30,  45,  60,  75,  90, 105, 120, 135, 150, 165, 180, 195, 210])

array - array
# Output: # Dizinin her bir elemanını kendisi ile çıkarır.
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

array - 30
# Output: # Dizinin her bir elemanından 30 çıkarır.
array([-30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16])

array - 1.25
# Output: # Dizinin her bir elemanından 1.25 çıkarır.
array([-1.25, -0.25,  0.75,  1.75,  2.75,  3.75,  4.75,  5.75,  6.75,  7.75,  8.75,  9.75, 10.75, 11.75, 12.75])

array / array
# Warning (from warnings module): # Dizide 0 elemanı olduğu için 0 / 0 uyarısı verir fakat bu duruma rağmen işleme devam eder.
# İlgili bölme işlemini nan olarak diziye ekler.
# Output:
array([nan,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])

array / 2
# Output: # Dizinin her bir elemanını ikiye böler.
array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. , 6.5, 7. ])

 Sonuç olarak NumPy Kütüphanesi Python'da diziler ve rastgele sayılar oluşturmak ve bu veriler üzerinde çeşitli işlemler gerçekleştirmek için hızlı ve verimli bir araçtır ve oldukça yaygın olarak kullanılmaktadır.