最近看了一些加快matlab运行速度的帖子,但是没有一个特别系统的文章,这里先把自己的实验部分做个简单记录,后面有实验再进行添加
matlab版本:R2014a (8.30 532)
电脑配置:
CPU: i5 - 6200U 2.30GHz(4 CPUs)~2.4GHz
内存: 8G
显卡: NVIDIA GeForce 930M
我们知道matlab 的数组存储是竖列优先的,但是我发现一个问题,我们在遍历横竖列不均等的数组时,横列遍历反而快一些。测试代码如下:
m = 10;
n = 1000000;
testLength = 100;
testResult = zeros(4, testLength);
for k = 1 : testLength
a = rand(n, m);
temp = a;
count = 0;
tic
for i = 1 : m
for j = 1 : n
% count = count + 1;
% a(j,i) = a(j,i) + count;
a(j,i) = a(j,i) * 2;
end
end
t = toc;
testResult(1, k) = t;
count = 0;
tic
for i = 1 : n
for j = 1 : m
% count = count + 1;
% a(i,j) = a(i,j) + count;
a(i,j) = a(i,j) * 2;
end
end
t = toc;
testResult(2, k) = t;
%%
a = temp';
count = 0;
tic
for i = 1 : m
for j = 1 : n
% count = count + 1;
% a(i,j) = a(i,j) + count;
a(i,j) = a(i,j) * 2;
end
end
t = toc;
testResult(3, k) = t;
count = 0;
tic
for i = 1 : n
for j = 1 : m
% count = count + 1;
% a(j,i) = a(j,i) + count;
a(j,i) = a(j,i) * 2;
end
end
t = toc;
testResult(4, k) = t;
end
mean(testResult, 2)
[minData, minIndex] = min(testResult);
sum(minIndex==3)
sum(minIndex==1)
我的运行结果:
mean(testResult, 2) =
[ 0.5108
0.5505
0.4969
0.5385 ]
[sum(minIndex==3) sum(minIndex==1)] = [86 14];
这个实验验证了小循环套大循环,运行速度会快不少。 但是遍历数组的情况是横向遍历反而快一点,有点疑虑。
由于电脑有限,希望广大申通的网友也可以把自己的运行结果记录一下,最好附加电脑配置信息,回复一下,谢谢大家。