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

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

function [output]=dashu(n)
% 验证大数定理
% n是模拟次数
sum_d=[];
for m=1:n
s=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);
      end
c=randi([1,1000],1);
d=randi([a,b],1,c);
sum_d=[sum_d d]
end
x=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:n
s=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);
      end
c=randi([1,1000],1);
d=randi([a,b],1,c);
sum_d{m}=d;
end
summ=cell2mat(sum_d);

x=mean(summ);
y=var(summ);
output=[x y];
hist(summ,20);

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值