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!