matlab选择向量,MATLAB:使用不同的索引列表多次选择向量中的元素

本文探讨了如何快速生成大量布尔矩阵,并通过比较 bsxfun、repmat、循环等不同方法在 MATLAB 中执行的效率,展示了使用 bsxfun 结合连接操作在1000次迭代中实现4.068684秒的最快速度。
摘要由CSDN通过智能技术生成

我能给你的最快速度是4秒(在我的机器上).我不是百分百肯定你是否尝试过这个,但无论如何你都去了.

我有一个包含这些内容的m文件randbool.m,用于生成测试数据.

function x = randbool(m,n)

x = logical(rand(m,n) < 0.5);

生成用于测试的数据:

>> u = randbool(1,20000);

>> M = randbool(30,20000);

我可以想到三种循环M行的方法(使用bsxfun,使用repmat,使用循环)和两种方法来拉出你想要的元素(连接&或逐点乘法.*).最快的是bsxfun和连接的组合:

Bsxfun /连词

>> tic, for i=1:1000, bsxfun(@and,u,M); end, toc

Elapsed time is 4.068684 seconds.

Bsxfun /乘法

>> tic, for i=1:1000, bsxfun(@times,u,M); end, toc

Elapsed time is 4.856784 seconds.

Repmat /连词

>> tic, for i=1:1000, utmp=repmat(u,30,1); M&utmp; end, toc

Elapsed time is 7.305158 seconds.

Repmat / multiplication

>> tic, for i=1:1000, utmp=repmat(u,30,1); M.*utmp; end, toc

Elapsed time is 8.117164 seconds.

循环/连接

>> tic, for i=1:1000, for j = 1:30, out(j,:)=u&M(j,:); end; end, toc

Elapsed time is 7.110872 seconds.

循环/乘法

>> tic, for i=1:1000, for j = 1:30, out(j,:)=u.*M(j,:); end; end, toc

Elapsed time is 8.322888 seconds.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值