MATLAB运行速度与数组维数的关系

来源:互联网 发布:php代码开元 编辑:程序博客网 时间:2024/05/22 19:07

最近看了一些加快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;    endmean(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];


这个实验验证了小循环套大循环,运行速度会快不少。 但是遍历数组的情况是横向遍历反而快一点,有点疑虑。


由于电脑有限,希望广大申通的网友也可以把自己的运行结果记录一下,最好附加电脑配置信息,回复一下,谢谢大家。






原创粉丝点击