%mprun kullanma: Kahraman BMI 2.0
BMİ'leri hesaplamak için farklı bir yaklaşım kullanmak bellekten tasarruf sağlayabilir mi, görelim. Hatırlarsan, her kahramanın boyu ve kilosu bir numpy dizisinde saklanıyor. Bu da hesaplamalarını yapmak için NumPy'nin kullanışlı dizi indeksleme yeteneklerini ve yayınlama (broadcasting) özelliğini kullanabileceğin anlamına gelir. calc_bmi_arrays adlı bir fonksiyon oluşturuldu ve bmi_arrays.py adlı bir dosyaya kaydedildi. Kolaylık olması için aşağıda gösteriliyor:
def calc_bmi_arrays(sample_indices, hts, wts):
# Boy ve kiloları diziler olarak al
s_hts = hts[sample_indices]
s_wts = wts[sample_indices]
# Boyları cm'den m'ye çevir ve yayınlama ile karesini al
s_hts_m_sqr = (s_hts / 100) ** 2
# BMI'leri yayınlama kullanarak bir dizi olarak hesapla
bmis = s_wts / s_hts_m_sqr
return bmis
Dikkat edersen bu fonksiyon gerekli tüm hesaplamaları diziler kullanarak yapıyor.
Güncellenen bu dizi yaklaşımı bellek kullanımını azaltıyor mu, görelim:
memory_profilerpaketini IPython oturumuna yükle.bmi_arraysiçindencalc_bmi_arraysfonksiyonunu içe aktar.- Yukarıdaki adımları tamamladıktan sonra,
%mprunkullanarak süper kahraman verilerinde çalışancalc_bmi_arrays()fonksiyonunu profile et.sample_indicesdizisi,htsdizisi vewtsdizisi oturumuna yüklendi.
Kodlamayı bitirdikten sonra şu soruyu yanıtla:
calc_bmi_array() fonksiyonunda dizi indeksleme ve yayınlama yapan kod satırları ne kadar bellek tüketiyor? (yani bu dört kod satırı için Increment sütununun toplamı nedir?)
Bu egzersiz
Verimli Python Kodu Yazmak
kursunun bir parçasıdırUygulamalı interaktif egzersiz
İnteraktif egzersizlerimizden biriyle teoriyi pratiğe dökün
Egzersizi başlat