Re: Mapping to a specific column or row in a matrix
- To: mathgroup at smc.vnet.net
- Subject: [mg103287] Re: Mapping to a specific column or row in a matrix
- From: John Jowett <john.m.jowett at gmail.com>
- Date: Sun, 13 Sep 2009 08:01:44 -0400 (EDT)
- References: <h7qem5$us$1@smc.vnet.net> <h8an76$h86$1@smc.vnet.net>
Here are a few other methods which work: I'm not sure why this method works. Perhaps someone can clarify? mat = ConstantArray[1, {10, 5}];; mat[[All, 3]] = mat[[All, 3]]/10; mat In this method (which I use a lot), the rule depends on the structure and its contents mat = ConstantArray[1, {10, 5}]; mat = mat /. {a_, b_, x_Integer, c__} :> {a, b, x/10, c} This method feels safe but I don't like it and it may be inefficient: mat = ConstantArray[1, {10, 5}]; Do[mat = ReplacePart[mat, {k, 3} -> mat[[k, 3]]/10], {k, 1, 10}]; mat John Jowett On Sep 10, 1:16 pm, dr DanW <dmaxwar... at gmail.com> wrote: > You are correct that you need a combination of Map and MapAt. > Specifically, you need the position spec from MapAt with the level > spec from Map. > > MapAtLevel[f_, expr_, n_, levelspec_: {1}] := > Map[MapAt[f, #, n] &, expr, levelspec - 1] > > It looks like you did this, but called it clunky. By creating a new > function, it becomes much less clunky. I often have to plot data from > a list of {x,y} pairs, but I want to transform all the y values to > decibel: > > dat = {{1, 200.}, {2, 250.}, {3, 300.}}; > > In[30]:= MapAtLevel[20 Log[10, #] &, dat, 2, 2] > > Out[30]= {{1, 46.0206}, {2, 47.9588}, {3, 49.5424}} > > Daniel