首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab中randi()函数的矢量化

Matlab中randi()函数的矢量化
EN

Stack Overflow用户
提问于 2014-07-15 16:57:52
回答 1查看 333关注 0票数 1

我希望能够进一步向量化以下代码,以尝试删除for循环:

代码语言:javascript
复制
A = randi(5,1,100);
for X = unique(A)
    B(A==X) = sum(randi(17,sum(A==X),X),2);
end

基本上是1到5(由A指定)随机数在1到17,100次之间求和。这种情况会多次发生,在接下来的迭代中,B会被A替代。循环的数量随每一步呈指数增长,我需要做10^9次试验,而不是仅仅100次,所以我想尽可能多地删除。任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 17:14:53

在我看来,你的代码已经相当有效了。

下面是一种矢量化方法(使用bsxfun),但代价是需要更多的内存和更多的计算。基本上,它总是与5个数字相加,其中一些数字以前是0。我怀疑它会比你的快:

代码语言:javascript
复制
A = randi(5,1,100e4);
B = sum(randi(17, 5, 100e4) .* bsxfun(@le, (1:5).', A));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24763990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档