看板 MATLAB 關於我們 聯絡資訊
我現在有一筆五維資料f 其大小為a*b*c*d*3 接著我做迴圈運算如下 for a = 1:A for b = 1:B for c = 1:C for d = 1:D f(a,b,c,d,:) = f(a,b,c,d,:) - mod(f(a,b,c,d,:),5); end end end end 接著我試另一筆四維資料g g是從f中取出來 g = squeeze(f(:,:,:,:,1)) 然後跑一樣的計算 for a = 1:A for b = 1:B for c = 1:C for d = 1:D g(a,b,c,d) = g(a,b,c,d) - mod(g(a,b,c,d),5); end end end end 問題來了 我原本以為速度只差在每個迴圈中1維和3維的差異而已 運算速度應該就是3:1這樣而已 但實際跑卻發現速度差了40幾倍@@ 這是為什麼? 難道說 f(a,b,c,d,1) = f(a,b,c,d,1) - mod(f(a,b,c,d,1),5) 和 g(a,b,c,d) = g(a,b,c,d) - mod(g(a,b,c,d,),5); 的運算速度有明顯差異嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.175.168 ※ 編輯: KingSteven 來自: 140.112.175.168 (12/14 11:40)
Raymond0710:誠心建議你不要用for迴圈暴力法 改寫成矩陣直接運算 12/14 13:04
Raymond0710:f = f - mod(f,5) 12/14 13:06
KingSteven:我知道,我只是想問問為何速度會差40倍 12/15 09:53
sunev:第二個迴圈有做initialization嗎? 12/15 12:42
KingSteven:initialization跟速度有什麼關係? 12/16 20:07
sunev:一直改矩陣的大小會讓速度變慢 12/17 11:27
KingSteven:喔喔有,我只是沒寫出來,矩陣大小有事先訂好 12/17 15:39
KingSteven:後來發現是Matlab自己會開外掛 12/17 15:40