       Re: Transposing a triangular matrix.

• To: mathgroup at smc.vnet.net
• Subject: [mg24337] Re: [mg24305] Transposing a triangular matrix.
• From: Rob Pratt <rpratt at email.unc.edu>
• Date: Sun, 9 Jul 2000 04:52:44 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```upperTriTranspose[lis_List]:=Table[lis[[i,k+1-i]],{k,Length[lis]},{i,k}]

upperTriTranspose[{{0.6`, 0.65`, 0.6`}, {0.75`, 0.65`}, {0.7`}}]

Rob Pratt
Department of Operations Research
The University of North Carolina at Chapel Hill

rpratt at email.unc.edu

http://www.unc.edu/~rpratt/

On Fri, 7 Jul 2000, Wen-Feng Hsiao wrote:

> Dear listers,
>
> I am writing a procedure to transpose a triangular matrix. For example,
> if the input list is {{0.6`, 0.65`, 0.6`}, {0.75`, 0.65`}, {0.7`}}, then
> the output will be {{0.6}, {0.65, 0.75}, {0.6, 0.65, 0.7}}. That is, an
> input of an upper triangular matrix as below
> - 0.6 0.65 0.6
>   -   0.75 0.65
>       -    0.7
>            -
> , will obtain an output of its corresponding lower triangular matrix as
> follows.
> -
> 0.6  -
> 0.65 0.75 -
> 0.6  0.65 0.7 -
>
> The diagonal elements can be omitted due to no needs for the subsquent
> analysis. I have written a pretty nasty version, which needs your help to
> sharpen it. Especially, please indicate me how to remove the For & While
> statements, but still remain the functionality.
>
> Wen-Feng
>
> ------------------------------
> lowerTriMatrixQ[lst_List] := Module[{len1, lenall},
>       len1 = Length[lst];
>       lenall = Length /@ lst;
>       Return[Range[len1] == lenall]];
> upperTriMatrixQ[lst_List] := Module[{len1, lenall},
>       len1 = Length[lst];
>       lenall = Length /@ lst;
>       Return[Range[len1] == Reverse[lenall]];
>       ];
>
> triMatrixQ[lst_List] := Return[lowerTriMatrixQ[lst] ||
> upperTriMatrixQ[lst]];
>
> triTranpose[lst_?triMatrixQ] :=
>     Module[{trilst = lst, len = Length[lst], i, tmp, res = {}},
>       If[upperTriMatrixQ[trilst],
>         i = 1;
>         While[i <= len,
>           tmp = {};
>           For[j = 1, j <= i, j++,
>             AppendTo[tmp, First[trilst[[j]]]];
>             trilst[[j]] = Rest[trilst[[j]]];];
>           AppendTo[res, tmp];
>           i++;
>           ];
>         ];
>       Return[res]];
> (*For saving space, I only list the codes for upper trianular case*)
>
> In:=
> triTranpose[{{0.6`, 0.65`, 0.6`}, {0.75`, 0.65`}, {0.7`}}]
> Out=
> {{0.6}, {0.65, 0.75}, {0.6, 0.65, 0.7}}

```

• Prev by Date: Re: difference equation
• Next by Date: Re: Mathematica gives bad integral ??
• Previous by thread: Transposing a triangular matrix.
• Next by thread: Re: Transposing a triangular matrix.