[問題] 矩陣維度與運算速度之間的關係

看板MATLAB作者 (HHung)時間14年前 (2011/12/14 11:39), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/2 (看更多)
我現在有一筆五維資料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)

12/14 13:04, , 1F
誠心建議你不要用for迴圈暴力法 改寫成矩陣直接運算
12/14 13:04, 1F

12/14 13:06, , 2F
f = f - mod(f,5)
12/14 13:06, 2F

12/15 09:53, , 3F
我知道,我只是想問問為何速度會差40倍
12/15 09:53, 3F

12/15 12:42, , 4F
第二個迴圈有做initialization嗎?
12/15 12:42, 4F

12/16 20:07, , 5F
initialization跟速度有什麼關係?
12/16 20:07, 5F

12/17 11:27, , 6F
一直改矩陣的大小會讓速度變慢
12/17 11:27, 6F

12/17 15:39, , 7F
喔喔有,我只是沒寫出來,矩陣大小有事先訂好
12/17 15:39, 7F

12/17 15:40, , 8F
後來發現是Matlab自己會開外掛
12/17 15:40, 8F
文章代碼(AID): #1Ew1gABa (MATLAB)
文章代碼(AID): #1Ew1gABa (MATLAB)