Re: Could this be improved?
- To: mathgroup at smc.vnet.net
- Subject: [mg21788] Re: Could this be improved?
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Thu, 27 Jan 2000 22:57:14 -0500 (EST)
- Organization: University of Western Australia
- References: <86mdpv$2f3@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Jordan Rosenthal wrote:
> I wrote the following code which works correctly. I was wondering, however,
> if there was a way of doing the same thing that had more of a Mathematica
> approach. I am new to Mathematica and am still trying to get a grasp on how
> to program effectively within the environment.
>
> myMtx[v_] := Module[
> {nCols, nRows, vPadded, c},
> nCols = Length[v];
> nRows = 2nCols - 1;
> c = ZeroMatrix[nRows, nCols];
> vPadded = PadRight[v, nRows, 0];
> For[i = 1, i <= nCols, i++,
> c[[All, i]] = vPadded;
> vPadded = RotateRight[vPadded]
> ];
> c
> ]
You also need the definition of ZeroMatrix.
I think that the essential function you are after is NestList. The following
code
is slightly simpler:
NewMtx[v_] := Module[
{n = Length[v]},
NestList[RotateRight,
Reverse[PadRight[PadLeft[v, 2n-1], 3n-2]], 2n-2][[All, Range[2n-1, 3n-2]]]
]
Cheers,
Paul