Python NumPy ile Sayısal Hesaplama: Temelden Uygulamaya
Beceri rehberi

Python NumPy ile Sayısal Hesaplama: Temelden Uygulamaya

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 5 dk okuma

NumPy ile sayısal hesaplama: dizi yapıları, indeksleme, broadcasting, vektörel işlemler, doğrusal cebir ve performans için adım adım öğrenme yolu.

NumPy nedir ve neden sayısal hesaplamanın temelidir?

NumPy, Python'da sayısal hesaplamanın temel kütüphanesidir. Merkezinde ndarray denilen çok boyutlu dizi nesnesi bulunur. Bu dizi, aynı türden değerleri bellekte bitişik tutar; bu yüzden Python listelerine göre hem daha az bellek harcar hem de işlemleri çok daha hızlı yapar.

Veri analizi, bilimsel hesaplama ve makine öğrenmesi kütüphanelerinin çoğu NumPy dizileri üzerine kurulmuştur. Tablo verisi, görüntü piksel matrisi, ses sinyali ve model ağırlıkları sonunda sayısal dizilere indirgenir. NumPy'ı iyi bilmek, bu alanlardaki diğer araçları anlamayı kolaylaştırır.

Dizi yapıları: oluşturma, şekil ve veri türü

Bir NumPy dizisi, bir Python listesinden ya da hazır oluşturucularla (sıfırlardan, birlerden, aralıktan, rastgele değerlerden) üretilir. Her dizinin üç temel özelliği vardır: şekli (her eksendeki eleman sayısı), boyutu (eksen sayısı) ve veri türü.

Şekil değiştirme sıkça gerekir: bir vektörü matrise ya da matrisi vektöre çevirmek için yeniden şekillendirme kullanılır; eleman sayısı değişmemelidir. Veri türü seçimi bellek ve doğruluk açısından önemlidir: tamsayı ve ondalık türler arasında sessiz dönüşümler beklenmedik sonuçlar üretebilir. Başlangıçta bu özellikleri yazdırarak ilerlemek en güvenli alışkanlıktır.

Örneğin bir görüntüyü temsil eden dizide yükseklik, genişlik ve renk kanalı ayrı eksenlerdir. Veri türü tamsayıysa ve parlaklığı yüzde olarak çarpıp bölmeye çalışırsanız sonuç yuvarlanır; işlemden önce türü ondalığa çevirmek bu tür sessiz hataları önler.

İndeksleme, dilimleme ve koşullu seçim

Dizilerden veri almak için üç yöntem vardır. Birincisi tek eleman indeksidir. İkincisi dilimlemedir: başlangıç, bitiş ve adım belirterek bir aralık alınır; dilimleme çoğu durumda yeni bir kopya değil, aynı belleğe bakan bir görünüm döndürür. Üçüncüsü mantıksal maskeleme ve liste indeksiyle koşullu seçimdir.

Örneğin bir satış matrisinde belli bir eşiğin üstündeki değerleri seçmek için önce koşul yazılır, ortaya çıkan doğru-yanlış dizisi maske olarak kullanılır. Görünüm ile kopya arasındaki farkı bilmek önemlidir; görünüm üzerinde yapılan değişiklik asıl diziyi de etkiler.

Vektörel işlemler ve broadcasting

NumPy'ın hız kazandıran yaklaşımı vektörel işlemdir: bir dizinin tüm elemanlarına Python döngüsü yazmadan tek ifadeyle işlem uygulanır. Toplama, çarpma, üs alma, logaritma ve trigonometrik fonksiyonlar bu yolla çalışır. Bunları sağlayan nesnelere evrensel fonksiyon (ufunc) denir.

Broadcasting, farklı şekillerdeki dizilerin kurallı biçimde birlikte işlenmesidir. Örneğin her satırdan o satırın ortalamasını çıkarmak ya da bir matrisin her sütununu farklı bir katsayıyla ölçeklemek, küçük diziyi büyük dizinin şekline otomatik genişleterek yapılır. Kuralın özü, eksenlerin sondan başa doğru uyumlu olması gerektiğidir. Şekil uyuşmazlığı hatası aldığınızda önce her iki dizinin şeklini yazdırıp eksenleri hizalayın.

Pratik bir örnek standartlaştırmadır: bir veri matrisinde her sütundan o sütunun ortalamasını çıkarıp standart sapmasına bölmek, döngü yazmadan tek ifadeyle yapılır. Makine öğrenmesi öncesi bu adım çok sık uygulanır ve broadcasting'in en yaygın kullanım örneğidir.

Doğrusal cebir ve istatistik işlemleri

Matris çarpımı, devrik alma, determinant, ters matris ve özdeğer hesaplamaları NumPy'ın doğrusal cebir araçlarıyla yapılır. Bu işlemler regresyon, boyut indirgeme ve sinir ağlarının temelini oluşturur. Eleman bazında çarpma ile matris çarpımının ayrı işlemler olduğunu karıştırmamak gerekir.

İstatistik tarafında ortalama, medyan, standart sapma, toplam ve en büyük-en küçük değerler hem tüm dizi üzerinde hem de bir eksen boyunca hesaplanır. Eksen parametresi, satır bazında mı sütun bazında mı işlem yapıldığını belirler; yeni başlayanların en çok karıştırdığı noktalardan biridir.

Performans ve gerçek dünya uygulamaları

Performans kazancının kaynağı döngüyü Python'dan alıp derlenmiş koda devretmektir. Pratik kurallar şunlardır: • Eleman eleman Python döngüsü yerine vektörel ifade yazın • Gereksiz kopyalardan kaçının, görünümleri bilinçli kullanın • Doğru veri türünü seçin • Büyük dizilerde ara sonuçları azaltın

Gerçek uygulamalara örnek olarak görüntülerin piksel matrisleri üzerinde parlaklık ayarı, sensör verisinden gürültü giderme, finansal getiri serilerinde hareketli ortalama ve simülasyonlarda rastgele sayı üretimi verilebilir. Hepsi aynı yapıya dayanır: veriyi dizi olarak kurmak, işlemi vektörel ifade ile yazmak.

Performansı tahmin etmek yerine ölçmek gerekir: aynı işlemi döngüyle ve vektörel ifadeyle yazıp çalışma sürelerini karşılaştırmak, hangi satırın darboğaz olduğunu gösterir. Bellek kısıtı olan büyük dizilerde ara dizileri yerinde işlemlerle (aynı diziye yazarak) azaltmak da hem hız hem bellek açısından kazanç sağlar.

Öğrenme yolu ve sık yapılan hatalar

Başlangıçta dizi oluşturma, şekil ve veri türü; sonra indeksleme ve dilimleme; ardından vektörel işlemler ve broadcasting; en sonda doğrusal cebir ve performans konuları çalışılır. Her aşamada küçük bir gerçek veri parçası üzerinde deneme yapmak, soyut kuralları somutlaştırır.

Sık hatalar: görünüm ile kopyayı karıştırmak, eksen parametresini yanlış vermek, tamsayı dizilerde bölme ve yuvarlama sonuçlarını beklemediği biçimde almak, şekli kontrol etmeden işleme girişmek. Bunların hepsinin çaresi, işlemden önce ve sonra şekil ile veri türünü yazdırmaktır.

Mindset programlarında NumPy

Mindset'in Python NumPy ile Sayısal Hesaplama programı şu modülleri kapsar: NumPy Temelleri ve Dizi Yapıları, İndeksleme, Dilimleme ve Yayın (Broadcasting), Vektörel İşlemler ve Üniversal Fonksiyonlar (ufunc), Doğrusal Cebir ve Matris İşlemleri, İstatistiksel Fonksiyonlar ve Veri Analizi, Numpy ile Performans ve Gerçek Dünya Uygulamaları.

İlgili Mindset programı

Python NumPy ile Sayısal Hesaplama

Sık sorulanlar

Sık sorulan sorular

NumPy ile Python listesi arasındaki temel fark nedir?

Python listesi farklı türden nesneler tutabilir ve elemanları bellekte dağınık duran referanslardır. NumPy dizisi aynı türden değerleri bitişik bellekte saklar; bu sayede vektörel işlemler derlenmiş kodla çok daha hızlı çalışır ve bellek kullanımı düşer. Bu fark küçük veri kümelerinde fark edilmeyebilir; ancak yüz binlerce eleman üzerinde işlem yaparken hız ve bellek farkı belirginleşir.

Broadcasting ne zaman hata verir?

İki dizinin şekilleri sondan başa doğru karşılaştırıldığında her eksende ya aynı olmalı ya da biri bir elemanlı olmalıdır. Bu koşul sağlanmazsa şekil uyuşmazlığı hatası alınır. Çözüm, dizilerin şeklini yazdırıp gerekli eksene yeniden şekillendirme ya da eksen ekleme yapmaktır. Genellikle dizilerden biri birer elemanlı bir eksen taşıyorsa NumPy onu otomatik genişletir; aksi hâlde hangi eksenin hizalanmadığını anlamak için iki şekli alt alta yazmak yeterli olur.

NumPy öğrendikten sonra hangi kütüphaneye geçilmeli?

Tablo verisi analizi hedefleniyorsa pandas, görselleştirme için matplotlib, makine öğrenmesi için scikit-learn ve derin öğrenme için PyTorch ya da benzeri çatılar doğal sonraki adımlardır. Hepsi NumPy dizileriyle uyumlu çalışır. Hangi kütüphaneye geçeceğiniz hedefinize bağlıdır; tüm bu araçlar NumPy dizi mantığı üzerine kurulduğu için bu temel bilgi hiçbir zaman boşa gitmez.

Döngü yerine vektörel işlem yazmak her zaman daha mı iyidir?

Sayısal dizilerde genellikle evet; hem daha kısa hem daha hızlıdır. Ancak ardışık bağımlılığı olan ya da koşulları çok karmaşık işlerde okunabilirlik için döngü yazmak makul olabilir. Önce doğru çalışan kodu yazıp sonra darboğazı ölçerek optimize etmek sağlıklı sıradır. Ayrıca vektörel kod genellikle daha az satırla yazıldığı için hata ayıklaması da kolaydır.

NumPy ile Sayısal Hesaplama Nasıl Yapılır