最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

关于编程的话1

互联网 admin 1浏览 0评论

关于编程的话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 : Nv0y = v0 * (c-1);for r = 1 : Mu0x = 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))


总结

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

关于编程的话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 : Nv0y = v0 * (c-1);for r = 1 : Mu0x = 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)

  1. 暂无评论