MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Extract any diagonal from a square matrix...

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66296] Re: Extract any diagonal from a square matrix...
  • From: "J Siehler" <jsiehler at gmail.com>
  • Date: Mon, 8 May 2006 00:46:32 -0400 (EDT)
  • References: <e3js8r$8kh$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

This is maybe a little cleaner:
diag[t_, d_] := Extract[t, {#, # + d} & /@ Range[1 - Min[0, d],
Length[t] - Max[0, d]]]

It treats the main diagonal as d=0; 1st superdiagonal as d=1; 1st
subdiagonal as -1; and so on.

hawkmoon269 wrote:
> 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.


  • Prev by Date: Mathematica Language Encoding in Linux?
  • Next by Date: 3D surface plotting
  • Previous by thread: Re: Extract any diagonal from a square matrix...
  • Next by thread: Re: Extract any diagonal from a square matrix...