have array entries filled depending on their indices?
1 view (last 30 days)
Show older comments
Florian Rössing on 23 May 2022
I want to fill an array
based on another array:
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 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?
Jan on 23 May 2022
Edited: Jan on 23 May 2022
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
A = zeros(n, 1);
for i = 1:n
A(i) = prod(B(1:i-1));
% Alternative: A naive loop avoiding repeated work:
D = zeros(n, 1);
c = 1;
for i = 1:n
D(i) = c;
c = c * B(i);
C = [1, cumprod(B(1:n - 1))].';
Even the loop is much faster than calculating the product from scratch in each iteration again. cumprod is much faster again.
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!