matlab - programacion - Calcule la suma de cada diagonal de una matriz
suma de elementos de una matriz (2)
Tengo una matriz como A y quiero calcular la suma de cada diagonal de esta matriz y mostrarla en un vector como Y.
A=[1 2 3; 4 5 6; 7 8 9]
Y=[3 8 15 12 7]
Sé el código
[sum(diag(y,2)),sum(diag(y,1)),sum(diag(y,0)),sum(diag (y,-1)),sum(diag (y,-2))]
pero quiero escribirlo como una función.
esta es una solución posible:
[r ,c]=size(A);
idx=bsxfun(@plus,(r:-1:1)'',0:c-1);
s=flipud(accumarray(idx(:),A(:)));
comparando esto con spdiags
que se propone en otra respuesta, este método funciona mucho mejor. Punto de referencia:
A = rand(1000);
disp(''---------bsxfun+accumarray----------'')
tic
[r ,c]=size(A);
idx=bsxfun(@plus,(r:-1:1)'',0:c-1);
s=flipud(accumarray(idx(:),A(:)));
toc
disp(''---------spdiags----------'')
tic
dsum = fliplr(sum(spdiags(A)));
toc
Resultado:
---------bsxfun+accumarray----------
Elapsed time is 0.0114651 seconds.
---------spdiags----------
Elapsed time is 8.62041 seconds.