🔢 1.3: Numpy Detaylı İnceleme

Python'da C Dizilerinin Gücü

📌 Numpy Nedir? (Ön Bilgi)

NumPy (Numerical Python), Python'da hızlı matematiksel işlemler yapmak için kullanılan bir kütüphanedir. Python'un standart kütüphanesi değildir, ayrıca yüklenir.

Kurulum:

pip install numpy

Kullanım:

import numpy as np  # np kısaltması yaygın kullanılır

# Numpy dizisi oluşturma
arr = np.array([1, 2, 3, 4, 5])

# Sıfırlardan oluşan dizi
zeros = np.zeros(10)  # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# Rastgele sayılardan oluşan dizi
random = np.random.rand(5)  # 5 adet 0-1 arası rastgele sayı

Bu derste Numpy'ı neden öğreniyoruz? Veri yapılarının performansını anlamak için C dizilerinin davranışını görmemiz gerekiyor. Numpy, Python'da C dizisi gibi davranan yapılar sunar.

Numpy Array vs Python List

Özellik Python List 🐍 Numpy Array 🔢
Bellek Dağınık (Referans) Bitişik (Blok)
Hız Yavaş (Cache Miss) Çok Hızlı (Cache Hit)

🏎️ CPU Cache ve Data Locality (Veri Yerelliği)

İşlemciler (CPU) veriyi RAM'den tek tek almaz, bloklar halinde (Cache Line) alır. Numpy bu mekanizmayı mükemmel kullanır.

✅ Numpy / C Dizisi (Bitişik)

CPU ilk elemanı okurken, yanındaki elemanlar da otomatik olarak Cache'e gelir. Sonraki okumalar ışık hızındadır.

10
20
30
40
...

❌ Python Listesi (Dağınık / Pointer Chasing)

Liste sadece adresleri tutar. Gerçek veriler RAM'in rastgele yerlerindedir. CPU sürekli RAM'e gitmek zorunda kalır (Cache Miss).

10
...
...
20
...
30
Teknik Detay: Python listesinde bir elemana erişmek için iki işlem gerekir: 1. Listeden adresi oku. 2. Adrese git ve değeri al (Dereferencing). Bu "zıplama" işlemi CPU'nun tahmin mekanizmasını (Branch Prediction/Prefetching) bozar.

🧪 Kod Laboratuvarı: Vektörel Hız

Python Kodu
import numpy as np
import time

# 1 Milyon eleman
boyut = 1_000_000
arr = np.random.rand(boyut)
liste = list(arr)

# Python Döngüsü
start = time.time()
toplam_py = sum(liste)
print(f"Python: {time.time() - start:.6f} sn")

# Numpy Vektörel
start = time.time()
toplam_np = np.sum(arr)
print(f"Numpy : {time.time() - start:.6f} sn")
Çıktı bekleniyor...