Python'da C Dizilerinin Gücü
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.
pip install numpy
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.
| Özellik | Python List 🐍 | Numpy Array 🔢 |
|---|---|---|
| Bellek | Dağınık (Referans) | Bitişik (Blok) |
| Hız | Yavaş (Cache Miss) | Çok Hızlı (Cache Hit) |
İşlemciler (CPU) veriyi RAM'den tek tek almaz, bloklar halinde (Cache Line) alır. Numpy bu mekanizmayı mükemmel kullanır.
CPU ilk elemanı okurken, yanındaki elemanlar da otomatik olarak Cache'e gelir. Sonraki okumalar ışık hızındadır.
Liste sadece adresleri tutar. Gerçek veriler RAM'in rastgele yerlerindedir. CPU sürekli RAM'e gitmek zorunda kalır (Cache Miss).
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")