[]
Matlab - for döngülerinden kurtulma
Aslında herhangi bir programlama dili için de geçerli. for döngüleri programı çok yavaşlatıyor ve içiçe 3-4 for döngüsü var. Büyük bir program. En fazla 10 dakika çalışması gereken program, 4-5 saat çalışıyor ve for döngülerinden kurtardıkça hızlanıyor ama nasıl daha hızlı hale getireceğimi bilemiyorum. Basit algoritma mantığı ile yapıyorum her şeyi. Bazı şeyleri araştırdıkça buluyorum, benim 15-20 satırlık kodum, 2 satıra indirgenebiliyor. bazılarını nasıl araştıracağımı bilmiyorum. Tavsiyesi olan var mı?
pre-allocation?
- uctumdageldim (19.07.17 15:30:39)
Pre-allocation zaten yapıyorum. Sonra for döngüsü başlıyor ve o vektörlerin, matrislerin içini dolduruyor. Demek istediğim pre-allocation'a ve for döngüsüne gerek duymadan kullanabileceğim, kolay komutların varlığını nasıl araştırabilirim.
En basit örneği şu olabilir. Bir vektördeki (vektörün adı a olsun) en büyük sayının indisini bulmak için
x=0;
for i=1:size(a,1)
if a(i)>x
x=a(i);
idx=i;
end
end
tarzı bir döngü kullanmak yerine,
idx=find(a==max(a))
gibi kolaylıklar.
Tabii, program karışık ama mutlaka kurtulmanın yolları vardır koskoca Matlab'de. stackoverflow, mathworks'te soruyorum ama üç milyon tane for döngüsünü arka arkaya nasıl soracağımı bilmiyorum. Bazen Google'dan derdimi aratıp ulaşabiliyorum kolay sonuçlara ama bazen de derdim aşırı spesifik oluyor. Bazen de 'Bu soru soruldu' diye tersliyorlar; ki haklı oluyorlar, sorulmuş ama çok genel bir adla sorulmuş. Benim aradığımın o genel ada uygun olduğunu daha önceden bilmiyordum.
En basit örneği şu olabilir. Bir vektördeki (vektörün adı a olsun) en büyük sayının indisini bulmak için
x=0;
for i=1:size(a,1)
if a(i)>x
x=a(i);
idx=i;
end
end
tarzı bir döngü kullanmak yerine,
idx=find(a==max(a))
gibi kolaylıklar.
Tabii, program karışık ama mutlaka kurtulmanın yolları vardır koskoca Matlab'de. stackoverflow, mathworks'te soruyorum ama üç milyon tane for döngüsünü arka arkaya nasıl soracağımı bilmiyorum. Bazen Google'dan derdimi aratıp ulaşabiliyorum kolay sonuçlara ama bazen de derdim aşırı spesifik oluyor. Bazen de 'Bu soru soruldu' diye tersliyorlar; ki haklı oluyorlar, sorulmuş ama çok genel bir adla sorulmuş. Benim aradığımın o genel ada uygun olduğunu daha önceden bilmiyordum.
- aychovsky (19.07.17 15:37:57 ~ 15:40:55)
Üzerinde çalıştığın konuyla ilgili matlab fonksiyonlarını araştırman lazım veya toolboxlar vardır, onlara bakabilirsin işine yarayan olabilir.
- reactionic (19.07.17 15:42:48)
Toolbox pek yok. Ana algoritma zaten Toolbox'u olmayan bir algoritma. Ben de ana algoritmanın yerini tutacak yeni bir algoritma test ediyorum zaten, algoritma bizim önerimiz. Bir de zaten bu projenin çıktısı, bir Toolbox yaratmak olacak.
- aychovsky (19.07.17 15:44:22 ~ 15:46:50)
1