关于编程的话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)

在这里插入图片描述


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))

在这里插入图片描述


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))

在这里插入图片描述


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))

在这里插入图片描述


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))

在这里插入图片描述


总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值