RE: Thread? Through? Operate?
- To: mathgroup at smc.vnet.net
- Subject: [mg32398] RE: [mg32388] Thread? Through? Operate?
- From: "Wolf, Hartmut" <Hartmut.Wolf at t-systems.de>
- Date: Sat, 19 Jan 2002 01:16:31 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
> -----Original Message-----
> From: Johannes Ludsteck [SMTP:johannes.ludsteck at wiwi.uni-regensburg.de]
To: mathgroup at smc.vnet.net
> To: mathgroup at smc.vnet.net
> Subject: [mg32388] Thread? Through? Operate?
>
> Dear MathGroup members,
> I have a list of n unnamed functions
>
> f = {expr1 &, expr2 &,... ,exprn &}
> (each function has exactly one arguement.
> and a list of n arguments.
>
> arg = {arg1, arg2,... ,argn}
>
> I simply want to apply each function expri &
> to the respective argument argi in order
> to obtain the list of function values fi.
> Is there no more elegant way than the following one?
>
> Map[#[[1]][#[[2]]]&, Transpose[{f,arg}]
>
> Thanks,
> Johannes
>
>
[Hartmut Wolf]
Johannes,
elegance is a questionable, at least unclear goal.
I think your solution
Map[#[[1]][#[[2]]]&,Transpose[{{f1,f2,f3},{x1,x2,x3}}]]
is quite acceptable; I just would rewrite it as
Apply[#1[#2]&,Transpose[{{f1,f2,f3},{x1,x2,x3}}],{1}]
There are alternatives of course, here are some of them
Inner[#1[#2]&,{f1,f2,f3},{x1,x2,x3},List]
Thread[Unevaluated[#1[#2]&[{f1,f2,f3},{x1,x2,x3}]]]
MapThread[#1[#2]&,{{f1,f2,f3},{x1,x2,x3}}]
Inner[Apply,{f1,f2,f3},Thread[Null[{x1,x2,x3}]],List]
Inner[Apply,{f1,f2,f3},Null/@{x1,x2,x3},List]
Unevaluated[Thread[Unevaluated[Apply[{f1,f2,f3},xx]]]]/.xx->
Transpose[{{x1,x2,x3}}]
MapThread[Apply,{{f1,f2,f3},Transpose[{{x1,x2,x3}}]}]
You can build more variants from this. If you have to work
with held arguments (Map)Threading Apply seems to be most
attractive, supposed your Arguments come wrapped with Hold
or something equivalent.
--
Hartmut Wolf