matlab预设一个空矩阵,通过空矩阵乘法初始化数组的更快方法?(Matlab)

本文探讨了在Matlab中使用不同方法预设空矩阵并初始化数组的效率,包括直接使用`zeros`、空矩阵乘法、动态增长等。实验结果显示,虽然空矩阵乘法在初期看似更快,但实际分配时间会被推迟到首次使用时,与其他方法的总时间相近。文章还涉及了内存分配、单元格数组和结构数组的行为,以及未记录的函数`mxFastZeros`。
摘要由CSDN通过智能技术生成

结果可能会产生误导。当您将两个空矩阵相乘时,生成的矩阵不会立即“分配”和“初始化”,而是会推迟到您第一次使用它时(有点像惰性计算)。

当索引超出范围以增长变量时,情况也是如此,在数字数组的情况下,该变量将用零填充所有缺失的条目(我将在后面讨论非数字的情况)。当然,以这种方式生长矩阵不会覆盖现有元素。

因此,虽然看起来更快,但是您只是在延迟分配时间,直到您真正开始使用矩阵。最后,您将拥有与开始时一样的分配时间。

与其他几种选择相比,展示此行为的示例:

N = 1000;

clear z

tic, z = zeros(N,N); toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

tic, z = zeros(N,0)*zeros(0,N); toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

tic, z(N,N) = 0; toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

tic, z = full(spalloc(N,N,0)); toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

tic, z(1:N,1:N) = 0; toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

val = 0;

tic, z = val(ones(N)); toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

clear z

tic, z = repmat(0, [N N]); toc

tic, z = z + 1; toc

assert(isequal(z,ones(N)))

结果显示,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值