关于编程的屁话1

关于编程的屁话1


C++

MATLAB


C++

经过一些编程训练后我发现

  1. 使用for比使用函数的时间快,且可能内存不会过早的溢出
  2. 使用do whilewhile(){}for的时间快


MATLAB

  1. 句柄计时比使用 tic;function;toc计时的时间快
%对比sinfun1的执行时间 f(x)=sin(x/(100*pi))
function y = sinfun1(M)
x = 0 : M - 1 ;
for k = 1 : numel(x)
    y(k) = sin(x(k) / (100*pi));
end
%命令行
>> tic; sinfun1(100); toc
>>> M = 100;
>> f = @() sinfun1(M);
>> timeit(f)

关于编程的屁话1_第1张图片


2.预分配数组比不使用预分配数组的时间快

%执行f(x)=sin(x/(100*pi))公式,对比使用预分配数组的函数 sinfun2 与没有使用预分配数组的函数 sinfun1,
其区别仅仅在于 y=zeros(1, numel(x)); 语句的使用
sinfun1.m
function y = sinfun1(M)
x = 0 : M - 1 ;
for k = 1 : numel(x)
   y(k) = sin(x(k) / (100*pi));
end
sinfun2.m
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
%命令行
>> timeit(@() sinfun1(20000))
>> timeit(@() sinfun2(20000))

关于编程的屁话1_第2张图片


3.向量化循环比预分配数组的时间快

%执行f(x)=sin(x/(100*pi))公式,对比使用预分配数组的函数 sinfun2 与使用向量化数组的函数 sinfun3
sinfun2.m
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
sinfun3.m
function y =sinfun3(M)
x = 0 : M-1;
y = sin(x./(100/pi));
%命令行
>> timeit(@() sinfun2(20000))
>> timeit(@() sinfun3(20000))

关于编程的屁话1_第3张图片


4.将数字当作矩阵向量化处理比使用for的时间快

twodsin1.m
%根据公式 f(x,y)=Asin(u0x+v0y)使用for来创建一副合成图像
function f = twodsin1(A, u0, v0, M, N)
f = zeros(M,N);
for c= 1 : N
    v0y = v0 * (c-1);
    for r = 1 : M
        u0x = u0*( r - 1 );
        f(r, c) = A * sin(u0x+v0y);
    end
end
%命令行
timeit(@() twodsin1(1, 1/(4*pi), 1/(4*pi), 512, 512))

关于编程的屁话1_第4张图片


twodsin2.m
%根据公式 f(x,y)=Asin(u0x+v0y)使用向量化来创建一副合成图像
function f = twodsin2(A, u0, v0, M, N)
r = 0 : M -1;
c = 0 : N-1;
[C , R] = meshgrid(c,r);
f = A*sin(u0*R+v0*C);
%命令行
timeit(@() twodsin2(1, 1/(4*pi), 1/(4*pi), 512, 512))

关于编程的屁话1_第5张图片


总结

!! 当然不排除特殊情况,可能与算法的好坏有关。

你可能感兴趣的:(算法)