Python'da Vektörleştirme ve Yayınlama
Yayınlanan: 2020-12-01Vektörleştirme ve Yayın, Numpy ile matematiksel işlemler yaparken hesaplama süresini hızlandırmanın ve bellek kullanımını optimize etmenin yollarıdır. Bu yöntemler, algoritmaların herhangi bir darboğazla karşılaşmaması için zaman karmaşıklığının azaltılmasını sağlamak için çok önemlidir. Bu optimize edilmiş işlem, uygulamaların ölçeklenebilir olması için gereklidir. Her iki tekniği de gözden geçireceğiz ve bazı örnekler uygulayacağız.
Bu eğitimin sonunda, aşağıdaki bilgilere sahip olacaksınız:
- Vectorization, Numpy tarafından nasıl işlenir?
- Vectorization olan ve olmayan zaman farkları
- Yayıncılık nedir
- Yayın, normal Matrix çarpmasından ne kadar farklıdır?
vektörleştirme
Çoğu zaman dizi çarpması gibi diziler üzerinde matematiksel işlemlere ihtiyaç duyarız. Şimdi, vektörleştirilmemiş bir yol, bir döngü kullanarak element bilge çarpma yapmak olacaktır. Bunu bu şekilde uygulamak, aynı çarpma işleminin birden çok kez yapılmasına neden olur, bu da veri boyutu çok büyükse hesaplama kaynaklarının israfına neden olur. Hadi hızlıca bir göz atalım.
Vektörleştirilmemiş yol:
Rastgele içe aktar a = [random.randint( 1 , 100 ) için _ aralıkta( 10000 ) ] |
#Çıktı: >> 1000 döngü, en iyi 3 : döngü başına 658 µs |
Vektörize yol:
numpy'yi np olarak içe aktar a = np.array([random.randint( 1 , 100 ) için _ aralığında ( 10000 )]) b = np.array([random.randint( 1 , 100 ) için _ aralığında ( 10000 )]) %zaman a*b |
#Çıktı: >> 100000 döngü, en iyi 3 : döngü başına 7,25 µs |
Gördüğümüz gibi, geçen süre 658 mikrosaniyeden sadece 7,25 mikrosaniyeye çıktı. Bunun nedeni, a = np.array([]) dediğimizde , tüm işlemlerin dahili olarak numpy tarafından işlenmesidir. Ve a*b yaptığımızda , numpy tüm diziyi vektörleştirme yoluyla bir kerede dahili olarak çarpar.
Burada, makinenizde farklılık gösterebilecek işlemin yürütülmesini zamanlamak için %timeit magic komutunu kullanıyoruz.
Boyutları (nx1) ve (1xm) olan 2 vektörün dış çarpımlarının başka bir örneğine bakalım. Çıktı (nxm) olacaktır.
ithalat zamanı numpy'yi içe aktar diziyi içe aktar a = array.array( 'i' , [random.randint( 1 , 100 ) için _ in range( 100 )]) b = dizi.array( 'i' , [random.randint( 1 , 100 ) için _ in range( 100 )]) |
T1 = zaman.işlem_zaman() c = numpy.zeros(( 200 , 200 )) aralıktaki i için ( len(a)): aralıktaki j için ( len(b)): c[i][j]= a[i]*b[j] T2 = zaman.işlem_zaman() print( f”Hesaplama süresi = { 1000 *(T2-T1)} ms” ) |
#Çıktı: >> Hesaplama süresi = 6.819299000000001 ms |
Şimdi bunu Numpy ile yapalım,
T1 = zaman.işlem_zaman() c = numpy.outer(a, b) T2 = zaman.işlem_zaman() print( f”Hesaplama süresi = { 1000 *(T2-T1)} ms” ) |
#Çıktı: >> Hesaplama süresi = 0.2256630000001536 ms |
Yine gördüğümüz gibi, Numpy vektörleştirme ile aynı işlemi daha hızlı işler.
Mutlaka Okuyun: Gerçek Dünyada Büyüleyici Python Uygulamaları
Şimdiye kadar aynı boyutta dizilerin kullanıldığı örnekler gördük. Ya dizilerin boyutları farklıysa? Numpy'nin bir başka harika özelliği olan Broadcasting burada devreye giriyor.
Yayın, vektörleştirmenin bir başka uzantısıdır, burada toplama, çıkarma, çarpma vb. işlemler için dizilerin aynı boyutlarda olması gerekmez. Bunu bir dizi ve skaler toplamaya ilişkin çok basit bir örnekle anlayalım.
a = np.dizi([ 1 , 1 , 1 , 1 ]) a+ 5 |
#Çıktı: dizi([ 6 , 6 , 6 , 6 ]) |
Gördüğümüz gibi, tüm elemanlara skaler 5 eklendi. Peki nasıl oldu?

Süreci hayal etmek için, daha sonra a dizisine eklenen bir dizi yapmak için skaler 5'in 4 kez tekrarlandığını düşünebilirsiniz. Ancak unutmayın, Numpy yalnızca bellekte yer kaplayacak bu tür diziler oluşturmaz. Numpy, a dizisine eklemek için yalnızca "yayınlar" veya skaler 5'i 4'e kadar çoğaltır.
Başka bir kolay örnek alalım.
a = np.ones(( 3 , 3 )) b = np.ones( 3 ) a+b |
#Çıktı: >> dizi([[ 2. , 2. , 2. ], [ 2. , 2. , 2. ], [ 2. , 2. , 2. ]]) |
Yukarıdaki örnekte, şekil (3,1) dizisi, a dizisiyle eşleşmesi için (3,3)'e yayınlanmıştır.
Ancak bu, herhangi bir boyuta sahip herhangi bir dizinin, herhangi bir boyuta sahip bir diziyi eşleştirmek için yayınlanabileceği anlamına mı geliyor?
HAYIR!
yayın kuralları
Numpy, yalnızca ölçütleri izleyen dizilerin yayınlandığından emin olmak için bir dizi kolay kural izler. Hadi bir bakalım.
Yayın kuralı, çalıştırılacak 2 dizinin ya aynı boyutlara sahip olması gerektiğini ya da bunlardan birinin 1 olması gerektiğini söylüyor.
Bunun eylemde olduğunu görelim.
Örnek 1:
Aşağıdaki boyut dizilerini göz önünde bulundurun:
a = 3 x 4 x 7
b = 3 x 4 x 1
Burada b'nin son boyutu, a'nın 7'ye uyması için yayınlanacak.
Dolayısıyla sonuç = 3 x 4 x 7
Örnek 2:
a = 3 x 4 x 7
b = 4
Şimdi, a ve b'nin boyutlarının sayısı eşit değil. Bu gibi durumlarda, daha az sayıda boyuta sahip dizi 1 ile doldurulacaktır.
Yani burada, b'nin ilk ve son boyutları 1'dir, yani a'nın 3 ve 7'ye uyması için yayınlanacaklar.
Dolayısıyla sonuç = 3 x 4 x 7.
Okuyun: Python Eğitimi
Örnek 3:
a = 3 x 4 x 1 x 5
b = 3 x 1 x 7 x 1
Burada yine b'nin ikinci ve son boyutları a'ya 4 ve 5'e uyacak şekilde yayınlanacaktır. Ayrıca a'nın üçüncü boyutu da b'ye 7'ye uyacak şekilde yayınlanacaktır.
Dolayısıyla sonuç = 3 x 4 x 7 x 5
Şimdi koşulun ne zaman başarısız olduğunu görelim:
Örnek 4:
a = 3 x 4 x 7 x 5
b = 3 x 3 x 7 x 4
Burada b'nin ikinci ve dördüncü boyutları a ile eşleşmiyor ve ikisi de 1 değil. Bu durumda Python bir değer hatası verecektir:
ValueError: işlenenler şekillerle birlikte yayınlanamadı ( 3 , 4 , 7 , 5 ) ( 3 , 3 , 7 , 4 ) |
Örnek 5:
a = 3 x 4 x 1 x 5
b = 3 x 2 x 3
Sonuç: Değer Hatası
Burada da ikinci boyut eşleşmiyor ve ikisi için de 1 değil.
Gitmeden önce
Her ikisi de vektörleştirme ve Yayınlama, Numpy'nin işlemesini optimize etme ve daha verimli hale getirme yöntemleridir. Bu kavramlar özellikle görüntü verisi ve Sinir Ağlarında çok yaygın olan matrisler ve n boyutlu dizilerle uğraşırken akılda tutulmalıdır.
Python, veri bilimi hakkında bilgi edinmek istiyorsanız, çalışan profesyoneller için oluşturulan ve 10'dan fazla vaka çalışması ve proje, pratik uygulamalı atölye çalışmaları, endüstri uzmanlarıyla mentorluk sunan IIIT-B & upGrad'ın Veri Biliminde PG Diplomasına göz atın. Sektör danışmanlarıyla bire bir, en iyi firmalarla 400+ saat öğrenim ve iş yardımı.
Python'da Vektörleştirme Nedir?
Numpy, Vectorization dahil olmak üzere döngülere ihtiyaç duymadan büyük veri dizileri üzerinde hızlı işlemler sağlayan birkaç standart matematiksel işlev sağlayan bir Python paketidir. Vektörleştirme, döngü kullanmadan Python programlarını hızlandırmak için kullanılır. Böyle bir yöntemin kullanılması, kodun yürütülmesi için gereken sürenin azaltılmasına yardımcı olabilir. Vektörler üzerinde gerçekleştirilen çeşitli işlemler vardır, örneğin vektörlerin nokta çarpımı gibi, tek bir çıktı ürettiği için skaler ürün olarak da bilinir, dış ürünler, bu da uzunluk x uzunluğuna eşit boyutlu bir kare matris ile sonuçlanır. vektörler, aynı indekslere sahip elemanlar üreten eleman bazında çarpma.
Python'da Yayıncılık Nedir?
Yayıncılık kelimesi, belirli kısıtlamalara neden olan aritmetik işlemler sırasında Numpy'nin farklı Boyutlara sahip dizileri nasıl yönettiğini ifade eder; daha küçük dizi, biçimlerinin tutarlı olması için muazzam dizi boyunca yayınlanır. Yayın, döngü işlemlerini Numpy'nin yaptığı gibi Python yerine C'de gerçekleşecek şekilde dizi işlemlerini vektörleştirmenize olanak tanır. Bunu, gereksiz veri kopyaları oluşturmadan gerçekleştirir ve verimli algoritma uygulamaları ile sonuçlanır. Belirli durumlarda yayın yapmak, işlemeyi yavaşlatan israfa neden olan bellek tüketimine yol açtığı için olumsuz bir fikirdir.
Python'da NumPy'nin kullanımları nelerdir?
NumPy veya Numerical Python, neredeyse her araştırma ve mühendislik dalı tarafından kullanılan ücretsiz ve açık kaynaklı bir Python kütüphanesidir. NumPy kitaplığı çok boyutlu dizi ve matris veri yapılarını içerir ve homojen bir n-boyutlu dizi nesnesi olan bir dizi üzerinde verimli bir şekilde çalışmak için yöntemler sunar. Kullanıcılar, dizilerde çok çeşitli matematiksel işlemleri yürütmek için NumPy'yi kullanabilir. Python'u diziler ve matrislerle verimli hesaplamalar sağlayan güçlü veri yapılarının yanı sıra bu diziler ve matrisler üzerinde çalışan büyük bir üst düzey matematiksel işlevler kitaplığıyla geliştirir.