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