我希望能够进一步向量化以下代码以尝试删除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次,所以我想尽可能地删除。任何帮助,将不胜感激。谢谢!
答案 0 :(得分:2)
你的代码在我看来已经非常有效了。
以下是矢量化方法(使用bsxfun
),但代价是需要更多内存和更多计算。基本上,它总是总计5个数字,其中一些先前已经成为0.我怀疑它会比你的更快:
A = randi(5,1,100e4);
B = sum(randi(17, 5, 100e4) .* bsxfun(@le, (1:5).', A));