Re: normalize a table
- To: mathgroup at smc.vnet.net
- Subject: [mg72806] Re: normalize a table
- From: "Ray Koopman" <koopman at sfu.ca>
- Date: Sat, 20 Jan 2007 03:40:47 -0500 (EST)
- References: <eopmgk$rr4$1@smc.vnet.net>
Ruth wrote: > Hi, > > I want to do something really simple, which is take a table made of > pairs and normalize the first number in each pair by dividing by the > largest. > > For instance, I want to transform this list > > {{1,0.2},{2,0.3},{3,0.4},{4,0.5}} > > into this one > > {{1/4, 0.2}, {1/2, 0.3}, {3/4, 0.4}, {1, 0.5}} > > The way i did it is through the chain of commands > > firsttable={{1,0.2},{2,0.3},{3,0.4},{4,0.5}}; > > > top=Max[Table[firsttable[[i,1]],{i,1,Length[firsttable]}]]; > > > mytable=Do[newtable=ReplacePart[newtable,newtable[[i,1]]/top,{i, > 1}],{i,1,Length[firsttable]}] > > There must be a more elegant way to do it, but @&# and commands like > those are still hard to handle for me, and I could not work it out > > Thanks in advance, > > Ruth There are many ways to do it. Here are four. In[1]:= firsttable = {{1,0.2},{2,0.3},{3,0.4},{4,0.5}}; Transpose@MapAt[#/Max@#&, Transpose@firsttable, 1] Transpose@{#[[1]]/Max@#[[1]],#[[2]]}&@Transpose@firsttable Transpose@ReplacePart[#,#[[1]]/Max@#[[1]],1]&@Transpose@firsttable Transpose@{firsttable[[All,1]]/Max@firsttable[[All,1]], firsttable[[All,2]]} Out[2]= {{1/4, 0.2}, {1/2, 0.3}, {3/4, 0.4}, {1, 0.5}} Out[3]= {{1/4, 0.2}, {1/2, 0.3}, {3/4, 0.4}, {1, 0.5}} Out[4]= {{1/4, 0.2}, {1/2, 0.3}, {3/4, 0.4}, {1, 0.5}} Out[5]= {{1/4, 0.2}, {1/2, 0.3}, {3/4, 0.4}, {1, 0.5}}