Re: Map onto a column
- To: mathgroup at smc.vnet.net
- Subject: [mg125458] Re: Map onto a column
- From: roby <roby.nowak at gmail.com>
- Date: Wed, 14 Mar 2012 00:43:12 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jjmv20$cfr$1@smc.vnet.net>
On 13 Mrz., 09:04, Sly Pandemia <slypande... at gmail.com> wrote: > Is there a neat way to map a function onto a specific column in an > array? > > For example if I have > > a = {{1,2,3},{4,5,6},{7,8,9}} > > and I want to map f onto the second element in each row. I would > normally use > > b = Map[MapAt[f,#,2]&,a] > > but this seems a bit awkward. I would expect to be able to use > > b = MapAt[f,a,{All,2}] > > but this appears to be illegal syntax. > > Is there any way to do what I want with a single Map/MapAt function? ... well a single MapAt[ ] but at the cost of two Transpose[ ] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} // Transpose // MapAt[f /@ # &, #, 2] & // Transpose or a single MapIndexed[ ] but some matching {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} // MapIndexed[If[MatchQ[#2, {_, 2}], f@#, #] &, #, {2}] & but all in all not better than your solution my best effort: {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} // ReplacePart[#, {v_, 2} :> f@#[[v, 2]]] & Robert