vectores una suma programacion multiplicacion matriz matrices listas extraer elementos columna codigo agregar matlab matrix sum diagonal

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.


spdiags puede hacer exactamente lo que quieras:

dsum = sum(spdiags(A))

Puede invertir el vector con fliplr y crear una función:

function dsum = diagsum(A) dsum = fliplr(sum(spdiags(A))); end

RESULTADO

dsum = 3 8 15 12 7