作者KingSteven (HHung)
看板MATLAB
標題[問題] 矩陣維度與運算速度之間的關係
時間Wed Dec 14 11:39:51 2011
我現在有一筆五維資料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)
1F:→ Raymond0710:誠心建議你不要用for迴圈暴力法 改寫成矩陣直接運算 12/14 13:04
2F:→ Raymond0710:f = f - mod(f,5) 12/14 13:06
3F:→ KingSteven:我知道,我只是想問問為何速度會差40倍 12/15 09:53
4F:推 sunev:第二個迴圈有做initialization嗎? 12/15 12:42
5F:→ KingSteven:initialization跟速度有什麼關係? 12/16 20:07
6F:推 sunev:一直改矩陣的大小會讓速度變慢 12/17 11:27
7F:→ KingSteven:喔喔有,我只是沒寫出來,矩陣大小有事先訂好 12/17 15:39
8F:→ KingSteven:後來發現是Matlab自己會開外掛 12/17 15:40