Resim

Python Numpy Modülü

Python Numpy Modülüne Giriş

1. Kurulum ve Temel Veri Yapısı: ndarray

numpy'nin temel veri yapısı, ndarray (N-dimensional array, N-boyutlu dizi) adı verilen homojen bir veri koleksiyonudur. Python'ın standart listelerinin aksine, numpy dizileri daha az bellek kullanır ve çok daha hızlı çalışır.

# Terminalde/Komut Satırında Kurulum
pip install numpy

A. numpy Dizisi (Array) Oluşturma

En yaygın yöntem, standart Python listelerini np.array() fonksiyonuna dönüştürmektir.

import numpy as np
# 1. Tek Boyutlu Dizi (Vektör)
liste_1d = [1, 2, 3, 4, 5]
dizi_1d = np.array(liste_1d)
print("--- Tek Boyutlu Dizi ---")
print(dizi_1d)
print(f"Tipi: {type(dizi_1d)}")
# 2. İki Boyutlu Dizi (Matris)
liste_2d = [[1, 2, 3], [4, 5, 6]]
dizi_2d = np.array(liste_2d)
print("\n--- İki Boyutlu Dizi (Matris) ---")
print(dizi_2d)

2. Dizi Özellikleri

numpy dizileri, boyut, şekil ve veri tipi gibi yapısal özellikleri öğrenmek için pratik metotlara sahiptir:

ÖzellikAmacı
.ndimDizinin boyut sayısı (1D, 2D, 3D...)
.shapeDizinin şekli (satır ve sütun sayısı)
.sizeDizideki toplam eleman sayısı
.dtypeDizinin elemanlarının veri tipi (int32, float64 vb.)
print("\n--- Dizi Özellikleri ---")
print(f"Boyut Sayısı (dizi_2d.ndim): {dizi_2d.ndim}")# Çıktı: 2
print(f"Şekli (dizi_2d.shape): {dizi_2d.shape}")
# Çıktı: (2, 3) (2 satır, 3 sütun)
print(f"Toplam Eleman Sayısı (dizi_2d.size): {dizi_2d.size}") 
# Çıktı: 6

3. Dizilerle Hızlı İşlemler (Vektorizasyon)

numpy'nin asıl gücü, matematiksel işlemleri dizinin tüm elemanlarına aynı anda (döngü kurmadan) uygulamasıdır. Bu, standart Python listelerine göre kat kat daha hızlıdır.

# Standart Python Listeleri
liste_a = [1, 2, 3]
# liste_a * 2 -> Hata verir, ya da listeyi iki kere yazar 
# ([1, 2, 3, 1, 2, 3])

# numpy Dizileri (Vektörel İşlem)
dizi_b = np.array([10, 20, 30])
dizi_c = np.array([1, 2, 3])

print("\n--- Vektörel İşlemler ---")

# Her elemanı 2 ile çarp
sonuc_carpma = dizi_b * 2
print(f"Çarpma: {sonuc_carpma}") # Çıktı: [20 40 60]

# Elemanları birbirine ekle (element-wise addition)
sonuc_toplama = dizi_b + dizi_c
print(f"Toplama: {sonuc_toplama}")# Çıktı: [11 22 33]

# Karşılaştırma (Boolean Dizi)
sonuc_kosul = dizi_b > 25
print(f"Koşul: {sonuc_kosul}")# Çıktı: [False False True]

4. Özel Dizi Oluşturma Fonksiyonları

numpy, belirli amaçlar için hızlıca dizi oluşturmanıza yarayan hazır fonksiyonlara sahiptir:

FonksiyonAmacı
np.zeros(shape)Belirtilen şekilde sıfırlardan oluşan dizi oluşturur.
np.ones(shape)Belirtilen şekilde birlerden oluşan dizi oluşturur.
np.arange(start, stop, step)Belirli aralıkta sayılardan oluşan dizi oluşturur (Python range gibi).
np.linspace(start, stop, num)Başlangıç ve bitiş arasında eşit aralıklarla belirtilen sayıda eleman oluşturur.
print("\n--- Özel Dizi Oluşturma ---")
print(f"Sıfır Dizisi (2x2): \n{np.zeros((2, 2))}")

# 0'dan 10'a kadar 5 eşit aralık
print(f"Linspace: {np.linspace(0, 10, 5)}") 
# Çıktı: [ 0.   2.5  5.   7.5 10. ]

numpy Dizilerine Erişim (Indexing), Dilimleme (Slicing) ve Filtreleme

1. Dizilere Erişim (Indexing)

Python listelerinde olduğu gibi, numpy dizilerindeki elemanlara da indeks numaraları ile erişilir. Çok boyutlu dizilerde ise her boyut için indeks belirtilir.

A. Tek Boyutlu Erişim

import numpy as np
dizi_1d = np.array([10, 20, 30, 40, 50])

print("--- Tek Boyutlu Erişim ---")
print(f"İlk Eleman: {dizi_1d[0]}")      # Çıktı: 10
print(f"Son Eleman: {dizi_1d[-1]}")     # Çıktı: 50

B. İki Boyutlu Erişim

İki boyutlu dizilerde erişim, [satır_indeksi, sütun_indeksi] formatında yapılır.

matris = np.array([
    [1, 2, 3],  # Satır 0
    [4, 5, 6],  # Satır 1
    [7, 8, 9]   # Satır 2
])

print("\n--- İki Boyutlu Erişim ---")
# [1, 2]: 1. satırın (yani [4, 5, 6]) 2. sütunu (yani 6)
print(f"1. Satır, 2. Sütun Elemanı: {matris[1, 2]}") # Çıktı: 6
# [0, 1]: 0. satırın 1. sütunu (yani 2)
print(f"0. Satır, 1. Sütun Elemanı: {matris[0, 1]}") # Çıktı: 2

2. Dilimleme (Slicing)

Verinin bir alt kümesini almak için start:stop:step formatı kullanılır (tıpkı Python listelerinde olduğu gibi).

A. Dilimleme Kullanımı: [başlangıç:bitiş]

print("\n--- Dilimleme (Slicing) ---")
# 1. Tek Boyutlu Dilimleme: 1. indexten başla, 4. indexe kadar 
# (4 dahil değil)
dilim_1d = dizi_1d[1:4]
print(f"1D Dilim: {dilim_1d}") # Çıktı: [20 30 40]

# 2. İki Boyutlu Dilimleme: [Tüm satırlar, 1. sütundan sona kadar]
dilim_2d_sutun = matris[:, 1:]
print(f"2D Dilim (Sütunlar): \n{dilim_2d_sutun}")
# Çıktı:
# [[2 3]
#  [5 6]
#  [8 9]]

3. Koşullu Filtreleme (Boolean Indexing)

Bu, numpy ve pandas'ı bu kadar güçlü yapan özelliktir. Belirli bir koşula uyan elemanları seçmek için kullanılır.

  • Adım 1: Koşulu belirten bir Boolean (True/False) dizisi oluşturulur.

  • Adım 2: Bu Boolean dizi, orijinal diziye filtre olarak uygulanır.

yaslar = np.array([15, 22, 30, 18, 45, 12])

# 1. Koşul Dizisi Oluşturma (Boolean Array)
filtre_kosulu = yaslar >= 20
print(f"\nKoşul Dizisi: {filtre_kosulu}")
# Çıktı: [False True True False True False]
# 2. Filtreyi Uygulama
yirmi_ustu = yaslar[filtre_kosulu]
print(f"20 Yaş Üstü: {yirmi_ustu}") # Çıktı: [22 30 45]
# 3. Koşulu tek satırda uygulama (Daha yaygın kullanım)
tek_haneli_yaslar = yaslar[yaslar < 18]
print(f"18 Yaş Altı: {tek_haneli_yaslar}") # Çıktı: [15 12]

numpy: Matematiksel Fonksiyonlar ve İstatistik

numpy, diziler üzerinde döngü yazmaya gerek kalmadan tüm temel ve ileri düzey matematiksel işlemleri gerçekleştiren hızlı fonksiyonlar sunar.

1. Temel İstatistiksel Fonksiyonlar

Bu fonksiyonlar, genellikle veri setindeki tüm elemanlar üzerinde çalışır (veya belirli bir eksen/eksenler üzerinde).

FonksiyonAmacıAçıklama
np.mean()OrtalamaDizideki elemanların aritmetik ortalaması.
np.median()MedyanDizideki elemanların ortanca değeri.
np.std()Standart SapmaVerilerin ortalamadan ne kadar saptığını ölçer.
np.sum()ToplamDizideki tüm elemanların toplamı.
np.min() / np.max()Minimum / MaksimumDizideki en küçük ve en büyük değeri bulur.
import numpy as np

maaslar = np.array([50000, 65000, 48000, 72000, 65000, 80000])

print("--- Temel İstatistikler ---")
print(f"Ortalama Maaş: {np.mean(maaslar):,.2f}") # Çıktı: 63,333.33
print(f"Maksimum Maaş: {np.max(maaslar):,}")    # Çıktı: 80,000
print(f"Toplam Maaşlar: {np.sum(maaslar):,}")     # Çıktı: 380,000
print(f"Standart Sapma: {np.std(maaslar):,.2f}") # Çıktı: 10,750.37

2. Eksen Bazında (Axis) İşlemler

İki boyutlu bir matriste (axis=0 veya axis=1) belirli bir eksen boyunca (satır veya sütun) hesaplama yapmak için axis parametresi kullanılır.

  • axis=0: Sütunlar boyunca işlem yap (Her sütunun toplamı/ortalaması).

  • axis=1: Satırlar boyunca işlem yap (Her satırın toplamı/ortalaması).

matris = np.array([
    [10, 20, 30], # Satır 0
    [40, 50, 60]  # Satır 1
])
print("\n--- Eksen Bazında Toplam (np.sum) ---")
# axis=0 (Sütunlar) boyunca toplam: [10+40, 20+50, 30+60]
sutun_toplamlari = np.sum(matris, axis=0)
print(f"Sütun Toplamları: {sutun_toplamlari}") # Çıktı: [50 70 90]
# axis=1 (Satırlar) boyunca toplam: [10+20+30, 40+50+60]
satir_toplamlari = np.sum(matris, axis=1)
print(f"Satır Toplamları: {satir_toplamlari}") # Çıktı: [ 60 150]

3. Genel Matematik Fonksiyonları (Universal Functions - ufuncs)

numpy, eleman bazında hızlı matematiksel işlemler (trigonometri, üs alma, logaritma) için universal functions (ufuncs) sağlar.

dizi = np.array([1, 2, 3, 4])
print("\n--- Genel Matematik İşlemleri (ufuncs) ---")
# Karekök hesaplama
karekokler = np.sqrt(dizi)
print(f"Karekökler: {karekokler}")
# Çıktı:[1. 1.41421356 1.73205081 2.        ]
# Üstel fonksiyon (e^x)
ustel_degerler = np.exp(dizi)
print(f"Üstel Değerler: {ustel_degerler}")
# Logaritma (doğal logaritma)
logaritmalar = np.log(dizi)
print(f"Logaritmalar: {logaritmalar}")

Yorumlar

Bu blogdaki popüler yayınlar

Python random Modülü

Python print()

Yazılım Nedir?