have array entries filled depending on their indices?
    6 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
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 comentarios
Respuestas (1)
  Jan
      
      
 el 23 de Mayo de 2022
        
      Editada: Jan
      
      
 el 23 de Mayo de 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
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 comentarios
Ver también
Categorías
				Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

