DMUG-Archiv 2000

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Map - Funktion

Hallo,

> eine Funktion einer Variablen f[x_] kann man elegant mit
> Map[f[#]&,{1,2,3,4,5}] auf eine Liste anwenden.

Ach ja ?

> 
> Wie geht das aber im zweidimensionalen Fall?
> Ich habe eine Funktion von 2 Parametern definiert:
> 
> f[x_,y_]:=...
> 
> und möchte sie auf die paarweisen Kombinationen der Elemente zweier
> Listen anwenden, z.B. auf die Päärchen die durch
> 
> Outer[List, {1, 2, 3}, {2, 4, 8, 10}]
> 
> entstehen.
> 
> Geht das nicht irgendwie elegant ebenfalls mit Map[....]? oder muss
> man das schwerfällig mit Table und den entsprechenden Indizes
> erzeugen?
> 

Naja, es geht irgendwie mit Outer[] selbst, weil

?Outer

"Outer[f, list1, list2, ... ] gives the generalized outer product of the
\
listi, forming all possible combinations of the lowest-level elements in
each \
of them, and feeding them as arguments to f. Outer[f, list1, list2, ...
, n] \
treats as separate elements only sublists at level n in the listi.
Outer[f, \
list1, list2, ... , n1, n2, ... ] treats as separate elements only
sublists \
at level ni in the corresponding listi."


und daher

In[]:=Flatten[Outer[f, {1, 2, 3}, {2, 4, 8, 10}]]

Out[]={f[1, 2], f[1, 4], f[1, 8], f[1, 10], f[2, 2], f[2, 4], f[2, 8],
f[2, 10], 
  f[3, 2], f[3, 4], f[3, 8], f[3, 10]}

es geht nat"urlich auch mit Apply[_,{1}] oder @@@ 

In[]:=f @@@ Flatten[Outer[List, {1, 2, 3}, {2, 4, 8, 10}], 1]

Out={f[1, 2], f[1, 4], f[1, 8], f[1, 10], f[2, 2], f[2, 4], f[2, 8],
f[2, 10], 
  f[3, 2], f[3, 4], f[3, 8], f[3, 10]}


und nat"urlich geht es irgendwie auch mit Map[]

In[]:= Apply[f, #] &  /@ Flatten[Outer[List, {1, 2, 3}, {2, 4, 8, 10}],
1]

Out[]=
{f[1, 2], f[1, 4], f[1, 8], f[1, 10], f[2, 2], f[2, 4], f[2, 8], f[2,
10], 
  f[3, 2], f[3, 4], f[3, 8], f[3, 10]}

wobei das nat"urlich getrickst ist den f @@@ ist ja gerade Apply[f,#] &
/@
das kann man also nur bedingt gelten lassen.

So und jetzt noch eine Variante mit ganz vielen Map[]'s

In[]:=Flatten[(Function @@ { Function[x, f[x, Slot[1]]] /@ {1, 2, 3}} )
/@ {2, 4, 8, 10}]

Out[]={f[1, 2], f[2, 2], f[3, 2], f[1, 4], f[2, 4], f[3, 4], f[1, 8],
f[2, 8], 
  f[3, 8], f[1, 10], f[2, 10], f[3, 10]}

und ohne Outer[] -- die gef"allt mir eigentlich am Besten.

Gruss
  Jens


Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html