Re: Could this be improved?
- To: mathgroup at smc.vnet.net
- Subject: [mg21760] Re: [mg21741] Could this be improved?
- From: Rob Pratt <rpratt at email.unc.edu>
- Date: Thu, 27 Jan 2000 22:56:41 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
The following uses only Mathematica 3.0 code and is shorter. myMtx2[v_]:= Transpose[ Table[RotateRight[vPadded = Join[v, Table[0, {Length[v] - 1}]], i], {i, 0, Length[v] - 1}]] A step towards "a more Mathematica approach" is to remove For and Do loops. 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 Wed, 26 Jan 2000, Jordan Rosenthal wrote: > Hi all, > > 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 > ] > > For example, myMtx[{1,2,3}] takes the vector {1,2,3} and turns it into the > matrix {{1, 0, 0}, {2, 1, 0}, {3, 2, 1}, {0, 3, 2}, {0, 0, 3}} which looks > like > > [ 1 0 0 ] > [ 2 1 0 ] > [ 3 2 1 ] > [ 0 3 2 ] > [ 0 0 3 ] > > > Thanks, > > Jordan