Vectorizing loop containing multiplication of a scalar and a matrix
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Masa
el 4 de Feb. de 2022
Comentada: Masa
el 4 de Feb. de 2022
How to implement the following algorithm in a vectorized manner? (Preferably without using functions other than `mat`)
mat = @(i) [i-1, i, 0; i, i+1, 0; 0, 0, 1];
w = [0.2,0.5,1,0.5,0.2];
s = 0;
for j = 1:5
s = s + w(j)*mat(j);
end
the result is
s =
4.8 7.2 0.0
7.2 9.6 0.0
0.0 0.0 2.4
0 comentarios
Respuesta aceptada
Bruno Luong
el 4 de Feb. de 2022
Editada: Bruno Luong
el 4 de Feb. de 2022
w = [0.2,0.5,1,0.5,0.2];
i=reshape(1:length(w),1,1,[]);
z = zeros(size(i));
s=sum([i-1, i, 0+z; i, i+1, 0+z; 0+z, 0+z, 1+z].*reshape(w,size(i)),3)
6 comentarios
Bruno Luong
el 4 de Feb. de 2022
Editada: Bruno Luong
el 4 de Feb. de 2022
"so in such situations using for loop is inevitable."
No you can use ARRAYFUN but that is no better (worse) than the for-loop
mat = @(i) [i-1, i, 0; i, i+1, 0; 0, 0, 1];
w = [0.2,0.5,1,0.5,0.2];
i = 1:5;
M=arrayfun(mat, i, 'unif', 0);
wdM = arrayfun(@(w,mc) w*mc{1}, w, M, 'unif', 0);
s=sum(cat(3,wdM{:}),3)
If you prefer such cryptic code instead of for-loop just go ahead.
Más respuestas (0)
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!