都说matlab简单易上手,但是在用matlab的过程中会有很多很多的问题
一、如何确定能存放的最大数组的维数
由于数组是占据一段连续的内存,而matlab默认的数据格式是double,占用8个字节,我们看到最大的连续内存是605MB,我们计算一下便知最多能存放75626000左右个数。如果我们不清除变量a,下一个存放的数组的占用的内存必须小于291MB。
二、预分配内存
clear;
tic;
for i=1:500
for j=1:10000
a(i,j)=i+j;
end
end
toc;
%Elapsed time is 3.507443 seconds.
clear a
a=zeros(500,10000,'double'); %预分配内存
tic
for i=1:500
for j=1:10000
a(i,j)=i+j;
end
end
toc;
%Elapsed time is 0.163536 seconds.
三、向量化编程
这里,分享一个我的算例,使用repmat函数 (具体用法百度即可),大幅度提升了运算的速度
%使用for循环,用时327.737351 秒
IDP=1500;ntime=61368;
r = (ntime-1)/(IDP-1);
S1 = zeros(ntime,IDP,'double');
xi=zeros(1,IDP,'double');
for i=1:IDP
xi(i)=(i-1)*r+1;
end
tic
for i=1:IDP
for t=1:ntime
S1(t,i)=sinc((t-xi(i))/r);
end
end
toc
%使用repmat函数,用时仅 1.981046 秒 ,矩阵S和S1完全一致
IDP=1500;ntime=61368;
r = (ntime-1)/(IDP-1);
S = zeros(ntime,IDP,'double');
xi=zeros(1,IDP,'double');
for i=1:IDP
xi(i)=(i-1)*r+1;
end
tic
t=1:ntime;t=t';
tt=repmat(t,1,IDP);
xii=repmat(xi,ntime,1);
S=sinc((tt-xii)/r);
toc
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删