在Matlab中矢量化randi()函数

时间:2014-07-15 16:57:53

标签: matlab loops random iteration vectorization

我希望能够进一步向量化以下代码以尝试删除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次,所以我想尽可能地删除。任何帮助,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

你的代码在我看来已经非常有效了。

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

A = randi(5,1,100e4);
B = sum(randi(17, 5, 100e4) .* bsxfun(@le, (1:5).', A));