Matlab programının çalışma sistemi vektör ve matris işlemleri için optimize edilmiştir. Bu nedenle yazdığınız bir kodun vektörler ve matrislerden oluşması işlemlerini hızlandıracaktır. Vektörler ile çalışmanın bize kazandırdıklarını 3 ana başlık halinde incelemek gerekirse ;
- Görüntü açısından vektörel olarak kodlama yapmak , kodun anlaşılabilirliği artırmaktadır. Daha derli toplu bir kodunuz olduğu için gerek siz gerekse ileride koda müdahale edecek biri kodu hızlıca anlayabilecektir.
- Eğer kodumuzu vektörel tabanlı oluşturursak , daha az döngü kullanacağız. Daha az döngünün kullanılması bize daha kısa bir kod ve daha az hatanın barındığı bir kod verecektir.
- Vektörize edilmiş bir kod döngü tabanlı olarak yazılmış bir koda göre kat kat daha hızlı çalışmaktadır.
Vektörize edilmiş bir koda örnek vermek gerekirse;
Aşağıdaki kodta bir döngü içerisinde t’nin 1001 değeri için sin(t) değeri hesaplanmaktadır.
i = 0; for t = 0:.01:10 i = i + 1; y(i) = sin(t); end Elapsed time is 0.002866 seconds.
Fakat bu kodu aynı sonucu verecek şekilde , aşağıdaki gibi yazmak mümkün.dür
t = 0:.01:10; y = sin(t); Elapsed time is 0.000057 seconds.
Görüldiğü üzere ikinici kod birinciye göre daha kısa ve Matlab’ın ilgili kısımı derleyip koşturması daha hızlı yapılmaktadır.
Aşağıdaki kodta ise yine bir döngü içerinde her 5. elemen toplanmaktadır.
x = 1:100000; ylength = (length(x) - mod(length(x),5))/5; y(1:ylength) = 0; for n= 5:5:length(x) y(n/5) = sum(x(1:n)); end Elapsed time is 2.953290 seconds.
Vektörilizasyon kullanılarak işlemlerin en kadar hızlandığını işlem sürelerine bakarak görebilirsiniz.
x = 1:100000; xsums = cumsum(x); y = xsums(5:5:length(x)); Elapsed time is 0.000573 seconds.
Aşağıdaki hacim formülasyonu ile 10000 adet çap ve yükseklik için hacim hesabı yapalım.
V = 1/12*pi*(D^2)*H;
Bu yazıyı okumadan önce muhtemelen yazacağınız kod aşağıdaki gibi olacaktır. Bir for döngüsü içerisinde tüm D ve H parametreleri le hacim hesabını yapacaktınız.
for n = 10000 V(n) = 1/12*pi*(D(n)^2)*H(n); end Elapsed time is 0.000824 seconds.
Fakat bu yazıyı okuduktan sonra aşağıdaki gibi bir vektörizasyon işlemi ile , bu kodu aşağıdaki gibi yazabiliriz.
%Vectorized Calculation V = 1/12*pi*(D.^2).*H; Elapsed time is 0.000039 seconds
Not: Dizi işlemlerinde *, /, ve ^, operatörlerinden önce ‘.’ koymanız onları bir dizi işlem operatörüne döndürecektir |
İşi özetlemek gerekirse , kodlarımızdaki döngüsel işlemleri vektörlere dönüştürüp yazmamız yukarıda belirtilen birçok faydayı bize kazandıracaktır. Bir sonraki yazımda çok çekirdekli bir kod nasıl çalıştırılır bu konudan bahsetmeye çalışacağım.
iyi çalışmalar.