MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Mapping to a specific column or row in a matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103017] Re: Mapping to a specific column or row in a matrix
  • From: Valeri Astanoff <astanoff at gmail.com>
  • Date: Thu, 3 Sep 2009 19:57:44 -0400 (EDT)
  • References: <h7o86n$nj6$1@smc.vnet.net>

On 3 sep, 13:10, pfalloon <pfall... at gmail.com> 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?
>
> Thanks,
> Peter.

Good day,

A double transpose seems to be slightly faster than map+mapat :

In[1]:= mat=ConstantArray[1,{1000,500}];

In[2]:= res=Map[MapAt[#/10&,#,300]&,mat]//Timing//Short
Out[2]//Short= {0.047,{<<1>>}}

In[3]:= res=(tm=Transpose[mat];tm[[300]]/=10;tm//Transpose)//Timing//
Short
Out[3]//Short= {0.031,{<<1>>}}

--
V.Astanoff


  • Prev by Date: Re: Mapping to a specific column or row in a matrix
  • Next by Date: Re: Editing named style sheet?
  • Previous by thread: Re: Mapping to a specific column or row in a matrix
  • Next by thread: Re: Re: Mapping to a specific column or row in a matrix