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!