have array entries filled depending on their indices?
2 次查看(过去 30 天)
显示 更早的评论
I want to fill an array
A=zeros(1000,1);
based on another array:
B=linspace(0,100,1000);
Now I want to fill every A(i) with the product of all B(k) with k=1:i-1, I do that alike this:
for i=1:length(A)
A(i)=prod(B(1:i-1));
end
For large sizes of A this becomes very time intensive. Would there be a way to do it faster? I couldnt find a way to use arrayfun for that.
And suggest I want to fill A(i), but do some more stuff inside the for loop?
0 个评论
回答(1 个)
Jan
2022-5-23
编辑:Jan
2022-5-23
The code is strange, because all elements of A are 0 except for the first one. B(1) is zero, so prod(B(1:n)) is zeros also. Maybe you mean:
n = 10000;
B = linspace(1,100,n); % Not starting at 0
tic
A = zeros(n, 1);
for i = 1:n
A(i) = prod(B(1:i-1));
end
toc
% Alternative: A naive loop avoiding repeated work:
tic
D = zeros(n, 1);
c = 1;
for i = 1:n
D(i) = c;
c = c * B(i);
end
toc
% Faster:
tic
C = [1, cumprod(B(1:n - 1))].';
toc
Even the loop is much faster than calculating the product from scratch in each iteration again. cumprod is much faster again.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!