admin 管理员组文章数量: 1087649
关于编程的话1
关于编程的话1
C++
MATLAB
C++
经过一些编程训练后我发现
- 使用
for
比使用函数的时间快,且可能内存不会过早的溢出 - 使用
do while
与while(){}
比for
的时间快
MATLAB
- 句柄计时比使用
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 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1686637170a20242.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论