作者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