Extract any diagonal from a square matrix...

*To*: mathgroup at smc.vnet.net*Subject*: [mg66279] Extract any diagonal from a square matrix...*From*: "hawkmoon269" <rson at new.rr.com>*Date*: Sat, 6 May 2006 23:50:45 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

Trying to put a function together that extracts any one of the diagonals from a square matrix. Right now I have this -- DiagonalT[a_List, d_Integer] := Tr[Take[Which[Positive[d], a, Negative[d], Transpose[a]], {1, Length[a] - Abs[d] + 1}, {Abs[d], Length[a]}], List] This works, but I thought there might be something less cumbersome. Essentially, the function constructs a submatrix of the matrix so that the requested diagonal from the matrix becomes the main diagonal of the submatrix, which is then retrieved. D is the diagonal to retrieve, where d = 3 -- 2nd superdiagonal 2 -- 1st superdiagonal 1 -- main diagonal -2 -- 1st subdiagonal -3 -- 2nd subdiagonal etc... Some other things I've considered -- ...rotating the elements of each row until column 1 becomes the requested diagonal; ...dropping elements from each row until the first or last element in each row becomes the next element in the requested diagonal; ...flattening the matrix and then using Range and Part to retrieve the requested diagonal. Any thoughts...? h

**Follow-Ups**:**Re: Extract any diagonal from a square matrix...***From:*Andrzej Kozlowski <akoz@mimuw.edu.pl>

**Re: Extract any diagonal from a square matrix...***From:*"Carl K. Woll" <carlw@wolfram.com>