Re: Re: Extract any diagonal from a square matrix...
- To: mathgroup at smc.vnet.net
 - Subject: [mg66307] Re: [mg66298] Re: Extract any diagonal from a square matrix...
 - From: Sseziwa Mukasa <mukasa at jeol.com>
 - Date: Tue, 9 May 2006 02:34:53 -0400 (EDT)
 - References: <200605080446.AAA07438@smc.vnet.net>
 - Sender: owner-wri-mathgroup at wolfram.com
 
On May 8, 2006, at 12:46 AM, Bill Rowe wrote:
> On 5/6/06 at 11:50 PM, rson at new.rr.com (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]
>
> [deleted]
> Another possible approach would be to use SparseArray. For example,  
> the 1st superdiagonal can be obtained as follows:
>
> In[21]:=
> a=Table[10i +j,{i,4},{j,4}];
> b=SparseArray[{i_,j_}:>1/;j==i+1,{4,4}];
> SparseArray[a b]/.SparseArray[_,_,_,a_]:>Last@a
>
> Out[23]=
> {12,23,34}
>
> This can be generalized to extract an arbitrary diagonal by  
> changing b to be
>
> b=SparseArray[{i_,j_}:>1/;j==i+d] where
I am also going to use this convention because it makes life simpler:
> d=
>
> 2 -- 2nd superdiagonal
> 1 -- 1st superdiagonal
> 0 --  main diagonal
> -1 -- 1st subdiagonal
> -2 -- 2nd subdiagonal
Separating it into two cases:
DiagonalT[a_?MatrixQ,d_?NonNegative]:=Table[a[[i,i+d]],{i,First 
[Dimensions[a]]-d}]
DiagonalT[a_?MatrixQ,d_?Negative]:=Table[a[[i-d,i]],{i,First 
[Dimensions[a]]+d}]
Regards,
Ssezi
- References:
- Re: Extract any diagonal from a square matrix...
- From: Bill Rowe <readnewsciv@earthlink.net>
 
 
 - Re: Extract any diagonal from a square matrix...