NumPy (Numerical Python), yüksek performanslı bilimsel hesaplamalar için kullanılan açık kaynaklı bir Python kütüphanesidir. Sayısal verilerle etkin çalışmayı sağlar ve çok boyutlu diziler (arrays), matrisler ve bu diziler üzerinde yüksek seviyeli matematiksel işlemler gerçekleştirmek için kapsamlı araçlar sunar. Python programlama dilinde veri analizi, makine öğrenimi, görüntü işleme, sinyal işleme gibi birçok alanda temel taşlardan biri olarak kabul edilir.
Tarihçe
NumPy'nin kökeni, 1995 yılında Jim Hugunin tarafından geliştirilen Numeric adlı Python kütüphanesine dayanır. Daha sonra Travis Oliphant, 2005 yılında Numeric ile Numarray adlı başka bir projenin güçlü yönlerini birleştirerek NumPy'yi geliştirmiştir. NumPy, zamanla Python bilimsel ekosisteminin temel yapı taşlarından biri haline gelmiştir.
- 1995: Jim Hugunin tarafından Numeric’in oluşturulması.
- 2001: Numarray adlı alternatifin ortaya çıkışı.
- 2005: Travis Oliphant, NumPy’yi geliştirerek Numeric ve Numarray’ı birleştirdi.
- 2010’lar: Pandas, SciPy, Scikit-learn gibi kütüphanelerin gelişmesiyle NumPy'nin kullanımı arttı.
- 2020 ve sonrası: NumPy, GPU destekli alternatifler (CuPy gibi) ile birlikte hibrit yapılar için temel işlevler sağlamaya devam etmektedir.
Temel Özellikleri
- Çok Boyutlu Diziler (ndarray): NumPy’nin en temel veri yapısıdır. Tek boyutlu vektörlerden çok boyutlu tensörlere kadar veri yapıları oluşturulabilir.
- Vektörel İşlemler: Döngüler yerine vektörel işlemlerle çok daha hızlı hesaplamalar yapılabilir.
- Yüksek Performans: C diliyle yazıldığı için oldukça hızlıdır.
- Yaygın Fonksiyonlar: Lineer cebir, Fourier dönüşümü, istatistiksel analiz gibi yüzlerce yerleşik fonksiyon içerir.
- Broadcasting: Farklı boyutlardaki diziler üzerinde otomatik olarak işlem yapılmasını sağlar.
- Entegre Edilebilirlik: C/C++ ve Fortran gibi dillerle kolayca entegre edilebilir.
Kullanım Alanları
- Bilimsel Hesaplamalar ve Araştırmalar: Fizik, kimya, biyoloji gibi alanlarda veri analizi ve simülasyonlar.
- Makine Öğrenmesi ve Yapay Zeka: Veri ön işleme ve matris işlemleri için.
- Görüntü İşleme: Piksel bazlı işlemler ve filtreleme.
- Finansal Modelleme: Risk analizi, regresyon, zaman serileri.
- Veri Analizi: Pandas ve benzeri kütüphanelerle birlikte kullanılmak üzere veri temizleme ve analiz süreçlerinde.
- Simülasyon ve Oyun Fiziği: Sayısal modelleme ve hesaplama yoğun işlemler.
Temel NumPy Kodları
import numpy as np # 1) NumPy Dizileri Oluşturma a = np.array([1, 2, 3]) # Tek boyutlu dizi b = np.array([[1, 2], [3, 4]]) # İki boyutlu dizi (matris) c = np.array([[[1], [2]], [[3], [4]]]) # Üç boyutlu dizi (tensor) # 2) Dizi Boyut Bilgileri print(a.ndim) # Boyut sayısı (1) print(b.shape) # Şekil (2,2) print(c.size) # Toplam eleman sayısı (4) print(b.dtype) # Veri tipi (int64) # 3) Aritmetik İşlemler x = np.array([1, 2, 3]); y = np.array([10, 20, 30]) print(x + y) # Toplama → [11 22 33] print(y - x) # Çıkarma → [9 18 27] print(x * y) # Çarpma → [10 40 90] print(y / x) # Bölme → [10. 10. 10.] print(x ** 2) # Üs alma → [1 4 9] # 4) Hazır Dizi Oluşturma Fonksiyonları print(np.zeros((2, 3))) # 2x3 sıfırlar matrisi print(np.ones(4)) # [1. 1. 1. 1.] print(np.full((2, 2), 7)) # 2x2 sabit matris print(np.eye(3)) # 3x3 birim matris print(np.arange(0, 10, 2)) # [0 2 4 6 8] print(np.linspace(0, 1, 5)) # [0. 0.25 0.5 0.75 1. ] # 5) Dizi Şekillendirme a = np.arange(12).reshape(3, 4); print(a) # 3x4 matris print(a.flatten()) # Tek boyuta indir print(a.T) # Transpoz (satır ↔ sütun) # 6) İstatistiksel Fonksiyonlar d = np.array([1, 2, 3, 4, 5]) print(np.mean(d)) # Ortalama print(np.median(d)) # Medyan print(np.std(d)) # Standart sapma print(np.var(d)) # Varyans print(np.sum(d)) # Toplam print(np.min(d), np.max(d)) # Min ve max # 7) Koşullu Filtreleme (Boolean Indexing) a = np.array([10, 20, 30, 40, 50]) print(a[a > 20]) # 20'den büyükler → [30 40 50] print(a[a == 30]) # 30'a eşit olan → [30] # 8) Broadcasting (Yayılım) a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) print(a + b) # Her satıra b vektörünü ekler # 9) Lineer Cebir (Matris İşlemleri) A = np.array([[1, 2], [3, 4]]); B = np.array([[2, 0], [1, 2]]) print(np.dot(A, B)) # Matris çarpımı print(np.linalg.det(A)) # Determinant print(np.linalg.inv(A)) # Ters matris vals, vecs = np.linalg.eig(A) # Özdeğer ve özvektör print(vals); print(vecs) # 10) Rastgele Sayılar print(np.random.rand(3)) # [0,1) arası 3 sayı print(np.random.randn(3)) # Normal dağılım print(np.random.randint(1, 10, (2, 2))) # 1-9 arası 2x2 matris arr = np.array([1, 2, 3, 4, 5]); np.random.shuffle(arr); print(arr) # Dizi karıştır # 11) Dosya Okuma/Yazma data = np.array([[1, 2], [3, 4]]) np.save("veri.npy", data); print(np.load("veri.npy")) # .npy ile kaydet/yükle np.savetxt("veri.txt", data); print(np.loadtxt("veri.txt")) # .txt ile kaydet/yükle
Python Ekosistemindeki Önemi
NumPy, Python ekosisteminde bilimsel ve teknik programlamanın bel kemiğidir. Diğer birçok popüler kütüphane, NumPy dizilerini temel alır ya da onlarla entegre çalışır. Örnekler:
- Pandas: Tablolu veri yapılarında (DataFrame) NumPy dizilerini kullanır.
- SciPy: Bilimsel hesaplamalar için NumPy üzerine inşa edilmiştir.
- Matplotlib: Görselleştirme kütüphanesi, grafik verilerini NumPy dizileri üzerinden işler.
- Scikit-learn: Makine öğrenimi algoritmaları NumPy dizileri üzerinde çalışır.
- TensorFlow / PyTorch: NumPy benzeri tensör yapıları kullanır, çoğu zaman NumPy verileriyle dönüşümlüdür.
Ayrıca NumPy, büyük veri setleriyle çalışırken RAM kullanımını optimize eder ve paralel işlem yapılarında (multi-threading, GPU hesaplama) temel veri yapısı olarak tercih edilir.
Alternatifler ve Gelişmiş Sürümler
- CuPy: NVIDIA CUDA mimarisi üzerinde çalışan NumPy uyumlu bir kütüphane. GPU hızlandırmalı işlemler için kullanılır.
- JAX: NumPy API’sine benzer bir arayüz sunar, otomatik türev alma ve GPU/TPU desteği sağlar.
- XND / Dask: Daha büyük veri setleri ve paralel işlemler için ölçeklenebilir alternatiflerdir.
NumPy, Python’un bilimsel hesaplama gücünü büyük ölçüde artıran ve sayısal işlemlerde devrim yaratan bir kütüphanedir. Geniş API’si, hızı ve esnekliği ile veri analitiği ve yapay zeka başta olmak üzere birçok alanda yaygın olarak kullanılmakta, Python’u güçlü bir bilimsel hesaplama platformu haline getirmektedir.