Re: Nested list - adding to each entry
- To: mathgroup at smc.vnet.net
- Subject: [mg113033] Re: Nested list - adding to each entry
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Tue, 12 Oct 2010 04:22:42 -0400 (EDT)
- References: <i8ukm0$odi$1@smc.vnet.net>
- Reply-to: nma at 12000.org
On 10/11/2010 2:16 AM, Sebastian Schmitt wrote: > Dear all! > > (I recycle my disclaimer.) > > I'm new to Mathematica with a background mostly in C++. Many times I > have the impression that my style is not natural-Mathematica > (Mathematicaesque so to say). > > I want to add something (an absolute position) to each entry (a relative > position) of a list. This works as expected in the 1D case: > > In[43]:= 1 + {2, 3, 4} > > Out[43]= {3, 4, 5} > > But the 2D case is different because my list of relative positions is > interpreted as a matrix: > > In[57]:= {1, 2} + {{a, b}, {c, d}} > > Out[57]= {{1 + a, 1 + b}, {2 + c, 2 + d}} > > I would like to get > > {{1 + a, 2 + b}, {1 + c, 2 + d}} > > instead. > > I know I can achieve it with the help of a pure function: > > In[58]:= Map[# + {1, 2}&, {{a, b}, {c, d}}] > > Out[58]= {{1 + a, 2 + b}, {1 + c, 2 + d}} > > Is there a builtin function that does the same? I'm somehow reluctant to > use pure functions too much. Is my concern unfounded? > > Thanks in advance, > > Sebastian > Your solution is nice. Pure functions can be fun (when used safely :) There are many other ways to do this, may be Clear[a, b, c, d]; x = {1, 2}; y = {{a, b}, {c, d}}; Function[x,Inner[Plus,X,x,List]]/@ y MapIndexed[(#+x)&,y] Table[Inner[Plus,x,y[[i, All]],List],{i, 1, Length[y]}] and I am sure many more ways. --Nasser