Vectorize loop with function containing randoms
信息
此问题已关闭。 请重新打开它进行编辑或回答。
显示 更早的评论
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
1 个投票
You'd have to vectorize containsRandoms, not just the assignment to ds.
4 个评论
sforza
2011-10-14
Fangjun Jiang
2011-10-14
The for-loop in new version of MATLAB has been very efficient. Sometimes it's even faster then no-loop approach.
Sean de Wolski
2011-10-14
Yes. Avoid arrayfun. A for-loop is easier to understand and probably faster, especially in older versions.
sforza
2011-10-14
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 个评论
sforza
2011-10-14
Fangjun Jiang
2011-10-14
So is the function rand() the solution, or what do you really want to achieve?
sforza
2011-10-14
Fangjun Jiang
2011-10-14
Then, arrayfun() is probably what you are looking for. See update in the answer.
sforza
2011-10-14
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 个评论
sforza
2011-10-14
Fangjun Jiang
2011-10-14
Search for "anonymous function" in documentation to understand @().
此问题已关闭。
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!