Matlab性能优化——利用cell预分配内存(内容有误,更正)

来源:互联网 发布:mac如何写入ntfs 编辑:程序博客网 时间:2024/05/16 17:14

做模式识别实验遇到的一个问题:每次循环生成的向量维数都是随机的,如何把生成的向量最后合并成一个,用sum=[sum d]合并效率极低,原因在于matlab在循环中动态扩充数组会不断分配新的内存空间,并把原来的所有数据复制过去。

function [output]=dashu(n)% 验证大数定理% n是模拟次数sum_d=[];for m=1:ns=randi([-100,100],1,2);a=min(s);b=max(s);      while a==b           s=randi([-100,100],1,2);           a=min(s);           b=max(s);      endc=randi([1,1000],1);d=randi([a,b],1,c);sum_d=[sum_d d]endx=mean(sum_d);y=var(sum_d);output=[x y];hist(sum_d,20);

语法没问题,可是太耗时间,如果1000次要几十分钟,分析报告显示:sum_d=[sum_d d];耗费了96%的时间,后来改为用元胞数组

function [output]=dashu(n)% 验证大数定理% n是模拟次数sum_d{1,n}=[];for m=1:ns=randi([-100,100],1,2);a=min(s);b=max(s);      while a==b           s=randi([-100,100],1,2);           a=min(s);           b=max(s);      endc=randi([1,1000],1);d=randi([a,b],1,c);sum_d{m}=d;endsumm=cell2mat(sum_d);x=mean(summ);y=var(summ);output=[x y];hist(summ,20);

数组合并的方法
元胞数组的方法

今天发现那份原先代码运行慢的原因并非sum=[sum d]效率低,而是sum=[sum d] 表达式后面没加 分号,导致命令行窗口不断输出这个表达式的运算结果,导致很慢,加了分号后运行很快,甚至比用cell方案更快。

0 0
原创粉丝点击