[Date Index]
[Thread Index]
[Author Index]
RE:Help to clarify 'Map', 'Apply', and 'Thread'.
*To*: mathgroup at smc.vnet.net
*Subject*: [mg15709] RE:[mg15626] Help to clarify 'Map', 'Apply', and 'Thread'.
*From*: "Ersek, Ted R" <ErsekTR at navair.navy.mil>
*Date*: Fri, 5 Feb 1999 03:42:10 -0500 (EST)
*Sender*: owner-wri-mathgroup at wolfram.com
In response to a question from Wen-Feng Shaw I tried to demonstrate
'Map', 'Apply', 'Thread' and 'MapThread'. In retrospect I don't like
the discussion I gave on MapThread. I give it another attempt below.
*****MapThread******
MapThread can be used to Apply a function to each column of a matrix.
In[1]:=
mat={{a,b,c,d,e,f},{1,2,3,4,5,6}};
MapThread[foo,mat]
Out[1]=
{foo[a,1],foo[b,2],foo[c,3],foo[d,4],foo[e,5],foo[f,6]}
MapThread is equivalent to using Map followed by Apply at level 2 (see
below). I have to wonder why it isn't called ApplyThread. If anyone
is interested I could talk about "level specification" at another time.
In[2]:=
MapThread[foo,mat]===Apply[foo,Thread[mat],2] Out[2]=
True
__________________
Consider the use of MapThread on the tensor below.
In[3]:=
tensor={
{{a1,a2,a3,a4},{b1,b2,b3,b4}},
{{c1,c2,c3,c4},{d1,d2,d3,d4}},
{{e1,e2,e3,e4},{f1,f2,f3,f4}}
};
Dimensions[tensor]
Out[3]=
{3,2,4}
In[4]:=
MapThread[foo,tensor]
Out[4]={
foo[{a1,a2,a3,a4},{c1,c2,c3,c4},{e1,e2,e3,e4}],
foo[{b1,b2,b3,b4},{d1,d2,d3,d4},{f1,f2,f3,f4}]}
If you use MapThread on a tensor you may need to specify the level as a
third argument. In the next line MapThread is used at level 2 and gives
a very different result than the previous line.
In[5]:=
MapThread[foo,tensor,2]
Out[5]=
{{foo[a1,c1,e1],foo[a2,c2,e2],
foo[a3,c3,e3],foo[a4,c4,e4]},
{foo[b1,d1,f1],foo[b2,d2,f2],
foo[b3,d3,f3],foo[b4,d4,f4]}}
___________________
The next line is an interesting use of MapThread. Here we apply a list
of functions to a list of arguments.
In[6]:=
funcs={f1, f2, f3};
values={val1,val2,val3};
MapThread[(#1[#2])&, {funcs,values}] Out[6]=
{f1[val1],f2[val2],f3[val3]}
___________________
Alan Hayes once posted in this mathgroup something like the code below
to make a list of replacement rules. Another interesting use of
MapThread.
In[7]:=
pos=Array[p,{4,3}]
Out[7]=
{{p[1,1],p[1,2],p[1,3]},
{p[2,1],p[2,2],p[2,3]},
{p[3,1],p[3,2],p[3,3]},
{p[4,1],p[4,2],p[4,3]}}
In[8]:=
posval={{1,2,3},{4,5,6},{7,8,9},{11,12,13}};
Flatten[MapThread[Rule,{pos,posval},2]]
Out[8]=
{p[1, 1] -> 1, p[1, 2] -> 2,
p[1, 3] -> 3, p[2, 1] -> 4,
p[2, 2] -> 5, p[2, 3] -> 6,
p[3, 1] -> 7, p[3, 2] -> 8,
p[3, 3] -> 9, p[4, 1] -> 11,
p[4, 2] -> 12, p[4, 3] -> 13}
__________________
Cheers,
Ted Ersek
Prev by Date:
**RE: Repeated calls to Mathematica process**
Next by Date:
**Q: Why can't I stop TraditionalForm dismissing Times Attributes ?**
Previous by thread:
**Re: Help to clarify 'Map', 'Apply', and 'Thread'.**
Next by thread:
**Finding real part (newbie question)**
| |