matlab定义未知大小矩阵,MATLAB中未知长度的矩阵?

6fde6316d843712475026e7ab7ed730d.png

青春有我

在尝试节省空间时考虑性能的另一种方法是大批量预分配内存,根据需要添加更多批次。如果您必须在不知道预先确定的数量的情况下添加大量项目,这非常适合。BLOCK_SIZE = 2000;                          % initial capacity (& increment size)listSize = BLOCK_SIZE;                      % current list capacitylist = zeros(listSize, 2);                  % actual listlistPtr = 1;                                % pointer to last free positionwhile rand<1-1e-5                           % (around 1e5 iterations on avrg)  % push items on list  list(listPtr,:) = [rand rand];            % store new item  listPtr = listPtr + 1;                    % increment position pointer  % add new block of memory if needed  if( listPtr+(BLOCK_SIZE/10) > listSize )  % less than 10%*BLOCK_SIZE free slots    listSize = listSize + BLOCK_SIZE;       % add new BLOCK_SIZE slots    list(listPtr+1:listSize,:) = 0;  endendlist(listPtr:end,:) = [];                   % remove unused slots编辑:作为时间比较,请考虑以下情况:与上述50000次迭代相同的代码。事先预先分配整个矩阵: list = zeros(50000,2); list(k,:) = [x y];动态向矩阵添加向量: list = []; list(k,:) = [x y];在我的机器上,结果是:1)经过的时间是0.080214秒。2)经过的时间是0.065513秒。3)经过的时间是24.433315秒。更新:在评论中讨论后,我使用最新的R2014b版本重新运行了一些测试。结论是最新版本的MATLAB大大提高了自动阵列增长的性能!然而有一个问题; 数组必须在最后一个维度上增长(在2D矩阵的情况下为列)。这就是为什么在没有预分配的情况下追加原先预期的行仍然太慢的原因。这是上面提出的解决方案可以真正帮助的地方(通过批量扩展阵列)。请参阅此处获取完整的测试集:https://gist.github.com/amroamroamro/0f104986796f2e0aa618

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值