我需要儘快計算矩陣查找(請參見下文)。快速矩陣查找
totquadpoint和nbval.Wepast是固定的標量,每個200左右(向量flnewcumyieldpos和flneweta1pos的維度)。 nexttsteppenal是一個三維矩陣(尺寸至少爲80 * 80 * 80)
因爲我需要在很多時候做這個操作(這個雙循環本身就是一個三重嵌套循環),所以我需要使它快速。有沒有辦法讓它比下面寫的更快?如果在Matlab中不可能,那麼如果我嘗試在Java/C中創建這段代碼,我可以期待什麼類型的增益?
-------- CODE:-----------------
for k=1:totquadpoint
nexttsteppenalYA1dd=nexttsteppenal(flnewcumyieldpos(k),flneweta1pos(k),:);
nexttsteppenalYA1du=nexttsteppenal(upflnewcumyieldpos(k),flneweta1pos(k),:);
nexttsteppenalYA1ud=nexttsteppenal(flnewcumyieldpos(k),upflneweta1pos(k),:);
nexttsteppenalYA1uu=nexttsteppenal(upflnewcumyieldpos(k),upflneweta1pos(k),:);
flnewportvalposvec=flnewportvalpos(k,:);
upflnewportvalposvec=upflnewportvalpos(k,:);
for we=1:nbval.Wepast
penddd(k,we)=nexttsteppenalYA1dd(flnewportvalposvec(we));
penddu(k,we)=nexttsteppenalYA1dd(upflnewportvalposvec(we));
pendud(k,we)=nexttsteppenalYA1du(flnewportvalposvec(we));
penduu(k,we)=nexttsteppenalYA1du(upflnewportvalposvec(we));
penudd(k,we)=nexttsteppenalYA1ud(flnewportvalposvec(we));
penudu(k,we)=nexttsteppenalYA1ud(upflnewportvalposvec(we));
penuud(k,we)=nexttsteppenalYA1uu(flnewportvalposvec(we));
penuuu(k,we)=nexttsteppenalYA1uu(upflnewportvalposvec(we));
end
end
請添加數據,以便人們可以輕鬆地重現您的問題。 – 2012-02-01 21:29:52
*不寒而慄*我看到你使用'explicitVariableNames',但他們必須這麼長嗎? – Jonas 2012-02-01 21:40:33
@Jonas:我可以縮短它們。變量名稱的長度是否會影響速度(或僅用於提高可讀性?) – 2012-02-02 22:12:33