matlab代码优化:(1)预分配(2)向量化
注:在编程的时候可以先使用for循环而不是向量化,因为它便于debug。debug无误再进行向量化。(大神忽略)
function main M = 20000000; %两千万 X 两千万 矩阵 f1 = @()sinfun1(M); f2 = @()sinfun2(M); f3 = @()sinfun3(M); f4 = @()sinfun4(M); sprintf('f1-无预分配for循环用时:%f',timeit(f1)) sprintf('f2-有预分配for循环用时:%f',timeit(f2)) sprintf('f1/f2倍数:%f',timeit(f1)/timeit(f2)) sprintf('f3-无预分配向量用时:%f',timeit(f3)) sprintf('f4-有预分配向量用时:%f',timeit(f4)) sprintf('f2/f4倍数:%f',timeit(f2)/timeit(f4)) sprintf('f1/f4倍数:%f',timeit(f1)/timeit(f4)) function y = sinfun1(M) x = 0:M - 1; for k = 1:numel(x) y(k) = sin(x(k) / (100*pi)); end function y = sinfun2(M) x = 0:M-1; y = zeros(1, numel(x)); for k = 1:numel(x) y(k) = sin(x(k) / (100*pi)); end function y = sinfun3(M) x = 0:M-1; y = sin(x./(100*pi)); function y = sinfun4(M) x = 0:M-1; y = zeros(1, numel(x)); y = sin(x./(100*pi));结果:
>> main
ans =
'f1-无预分配for循环用时:6.492450' ans =
'f2-有预分配for循环用时:1.455167' ans =
'f1/f2倍数:5.855484' ans =
'f3-无预分配向量用时:0.976724' ans =
'f4-有预分配向量用时:0.885824' ans =
'f2/f4倍数:1.478817' ans =
'f1/f4倍数:7.839987'