Info
此问题已关闭。 请重新打开它进行编辑或回答。
Vectorize loop with function containing randoms
1 次查看(过去 30 天)
显示 更早的评论
Hello,
I would like to know if there is any way to vectorize this:
ds=zeros(1,max);
for i=1:max
ds(i)=containsRandoms(p1);
end
p1 is always a fixed scalar, I just want to execute the function many times to fill ds. The function I'm calling inside the loop contains randoms and many other calculations, so it will produce a different result each time.
I was trying something like
ds(1:max)=containsRandoms(p1);
but it is only executing containsRandoms once, and therefore ds is filled with the same value repeated max times.
Thanks in advance.
0 个评论
回答(3 个)
Peter
2011-10-14
You'd have to vectorize containsRandoms, not just the assignment to ds.
4 个评论
Sean de Wolski
2011-10-14
Yes. Avoid arrayfun. A for-loop is easier to understand and probably faster, especially in older versions.
Fangjun Jiang
2011-10-14
First, don't use max as a variable name as max() is a popular function.
Second, Are you looking at: ds=rand(5,3) for example?
Or:
a=magic(3);
b=arrayfun(@containsRandoms,a)
Assume your function containsRandoms() is something like this:
function out=containsRandoms(in)
out=in+rand;
5 个评论
Fangjun Jiang
2011-10-14
Then, arrayfun() is probably what you are looking for. See update in the answer.
Andrei Bobrov
2011-10-14
ds = arrayfun(@(i1)containsRandoms(p1),1:max1);
%if size of 'ds' m x n eg. 2 x 2
ds = reshape(arrayfun(@(i1)containsRandoms(p1),1:2*2),2,[]);
2 个评论
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!