我希望能够进一步向量化以下代码,以尝试删除for循环:
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次,所以我想尽可能多地删除。任何帮助都将不胜感激。谢谢!
发布于 2014-07-15 17:14:53
在我看来,你的代码已经相当有效了。
下面是一种矢量化方法(使用bsxfun),但代价是需要更多的内存和更多的计算。基本上,它总是与5个数字相加,其中一些数字以前是0。我怀疑它会比你的快:
A = randi(5,1,100e4);
B = sum(randi(17, 5, 100e4) .* bsxfun(@le, (1:5).', A));https://stackoverflow.com/questions/24763990
复制相似问题