Re: Mapping to a specific column or row in a matrix
- To: mathgroup at smc.vnet.net
 - Subject: [mg103016] Re: [mg102985] Mapping to a specific column or row in a matrix
 - From: Sseziwa Mukasa <mukasa at jeol.com>
 - Date: Thu, 3 Sep 2009 19:57:33 -0400 (EDT)
 - References: <200909031110.HAA24167@smc.vnet.net>
 
On Sep 3, 2009, at 7:10 AM, pfalloon wrote:
> Hi,
> I'm wondering if there is a more simple/elegant way to Map a function
> to a specific row or column of a matrix. The best I can come up
> requires both Map and MapAt, but it feels like there should be
> something more succinct (I suspect I may be overlooking something
> obvious).
>
> Example: suppose I want to divide entries in the 3rd column by 10.
>
> (* my clunky solution *)
> mat = ConstantArray[1, {10,5}];
> res = Map[MapAt[#/10 &, #, 3] &, mat]
>
>
> Note that the desired output is the entire matrix, so that rules out
> something like:
>
> mat[[All,3]]/10
>
>
> One thing that would seem natural would be to allow "All" as an
> element specification in the MapAt function. Thus, what I'm trying to
> do would be expressed as:
>
> (* doesn't work, but would be nice *)
> MapAt[#/10 &, mat, {All,3}]
>
> and if I wanted to do it to a specific row (say, the 3rd) it would be:
>
> (* doesn't work, but would be nice *)
> MapAt[#/10 &, mat, {3, All}]
>
>
> Any thoughts/suggestions?
I don't know if this is elegant, but you can specify all the  
positions you want to operate on in a single MapAt expression:
operateOnColumn[mat_,col_,func_]:=MapAt[func,mat,{#,col}&/@Range[First 
[Dimensions[mat]]]]
operateOnRow[mat_,row_,func_]:=MapAt[func,mat,{row,#}&/@Range[Last 
[Dimensions[mat]]]]
Regards,
Ssezi
- References:
- Mapping to a specific column or row in a matrix
- From: pfalloon <pfalloon@gmail.com>
 
 
 - Mapping to a specific column or row in a matrix