This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Funktionaloperationen /

Anwendung von Funktionen auf Listen und andere AusdrückeReine Funktionen

2.2.4 Anwendung von Funktionen auf Teile von Ausdrücken

Wenn Sie eine Liste von Elementen haben, ist es oft wichtig, eine Funktion separat auf jedes der Elemente anwenden zu können. In Mathematica wird dies mit Map möglich.

Dies wendet f separat auf jedes Element einer Liste an.

In[1]:= Map[f, {a, b, c}]

Out[1]=

Dies definiert eine Funktion, welche die ersten beiden Elemente einer Liste auswählt.

In[2]:= nimm2[list_] := Take[list, 2]

Mit Map können Sie nimm2 auf jedes Element einer Liste anwenden.

In[3]:= Map[nimm2, {{1, 3, 4}, {5, 6, 7}, {2, 1, 6, 6}}]

Out[3]=

Anwendung einer Funktion auf jedes Element einer Liste

Im Grunde wird durch Map[f, ausdr] die Funktion f um jedes Element des Ausdrucks ausdr „gehüllt". Sie können Map auf jeden Ausdruck anwenden, nicht nur auf Listen.

Dies wendet f auf jedes Element der Summe an.

In[4]:= Map[f, a + b + c]

Out[4]=

Dies wendet Sqrt auf jedes Argument von g an.

In[5]:= Map[Sqrt, g[x^2, x^3]]

Out[5]=

Map[f, ausdr] wendet f auf die erste Stufe der Teile in ausdr an. Mit MapAll[f, ausdr] können Sie f auf alle Teile von ausdr anwenden.

Dies definiert eine Matrix m.

In[6]:= m = {{a, b}, {c, d}}

Out[6]=

Map wendet f auf die erste Stufe von m an, in diesem Fall auf die Zeilen der Matrix.

In[7]:= Map[f, m]

Out[7]=

MapAll wendet f auf alle Stufen in m an. Wenn Sie diesen Ausdruck sorgfältig betrachten, sehen Sie, daß jeder Teil des Ausdrucks von einem f umhüllt wird.

In[8]:= MapAll[f, m]

Out[8]=

Im allgemeinen können Sie mit Stufenspezifikationen (siehe Abschnitt 2.1.7) Map mitteilen, auf welche Teile eines Ausdrucks Ihre Funktion angewandt werden soll.

Dies wendet f nur auf die Teile von m auf der Stufe 2 an.

In[9]:= Map[f, m, {2}]

Out[9]=

Wenn die Option Heads->True festgelegt wird, hüllt f sowohl den Kopf eines jeden Teils als auch seine Elemente ein.

In[10]:= Map[f, m, Heads->True]

Out[10]=

Methoden, eine Funktion auf verschiedene Teile von Ausdrücken anzuwenden

Mit Stufenspezifikationen können Sie Map mitteilen, auf welche Stufen der Teile eines Ausdrucks Sie eine Funktion anwenden wollen. Bei MapAt können Sie stattdessen jedoch eine explizite Liste der Teile angeben, auf die Sie eine Funktion anwenden wollen. Sie spezifizieren jeden Teil durch seine Indizes (siehe Abschnitt 2.1.4).

Hier ist eine Matrix.

In[11]:= mm = {{a, b, c}, {b, c, d}}

Out[11]=

Dies wendet f auf die Teile {1, 2} und {2, 3} an.

In[12]:= MapAt[f, mm, {{1, 2}, {2, 3}}]

Out[12]=

Dies liefert eine Liste der Positionen, an denen b in mm auftritt.

In[13]:= Position[mm, b]

Out[13]=

Sie können die Liste der Positionen, die Sie mit Position erhalten, direkt an MapAt weitergeben.

In[14]:= MapAt[f, mm, %]

Out[14]=

Um Mehrdeutigkeiten zu vermeiden, müssen Sie die Spezifikationen der Teile stets in eine Liste setzen, auch dann, wenn sie nur einen Index enthält.

In[15]:= MapAt[f, {a, b, c, d}, {{2}, {3}}]

Out[15]=

Anwendung einer Funktion auf spezifizierte Teile eines Ausdrucks

Hier ist ein Ausdruck.

In[16]:= t = 1 + (3 + x)^2 / x

Out[16]=

Dies ist die vollständige Form von t.

In[17]:= FullForm[ t ]

Out[17]//FullForm=

Sie können MapAt auf jeden Ausdruck anwenden. Beachten Sie, daß die Teile auf der Grundlage der vollständigen Form der Ausdrücke numeriert werden.

In[18]:= MapAt[f, t, {{2, 1, 1}, {2, 2}}]

Out[18]=

Anwendung einer Funktion auf Teile und ihre Indizes

Dies wendet f auf jedes Element in einer Liste an und gibt den Index des Elementes als zweites Argument von f an.

In[19]:= MapIndexed[f, {a, b, c}]

Out[19]=

Dies wendet f auf beide Stufen einer Matrix an.

In[20]:= MapIndexed[f, {{a, b}, {c, d}}, 2]

Out[20]=

Map erlaubt Ihnen, eine Funktion eines Argumentes auf Teile eines Ausdrucks anzuwenden. Manchmal werden Sie jedoch stattdessen eine Funktion mehrerer Argumente auf korrespondierende Teile mehrerer verschiedener Ausdrücke anwenden wollen. Dies wird mit MapThread möglich.

Anwendung einer Funktion auf mehrere Ausdrücke gleichzeitig

Dies wendet f auf korrespondierende Paare von Listenelementen an.

In[21]:= MapThread[f, {{a, b, c}, {ap, bp, cp}}]

Out[21]=

MapThread arbeitet mit jeder Anzahl von Ausdrücken, wenn sie nur dieselbe Struktur haben.

In[22]:= MapThread[f, {{a, b}, {ap, bp}, {app, bpp}}]

Out[22]=

Mit Funktionen wie Map können Sie Ausdrücke modifizieren. Manchmal wollen Sie jedoch einfach einen Ausdruck durchlaufen und eine bestimmte Funktion auf einige seiner Teile anwenden, ohne einen neuen Ausdruck zu erzeugen. Ein typischer Fall liegt vor, wenn die Funktion, die Sie anwenden, bestimmte „Nebenwirkungen" hat, wie zum Beispiel Ausführung von Zuweisungen oder Erzeugung von Ausgaben.

Evaluierung von Funktionen mit Teilen von Ausdrücken

Map konstruiert eine neue Liste, in der f auf jedes Element der Liste angewandt wurde.

In[23]:= Map[f, {a, b, c}]

Out[23]=

Scan evaluiert das Ergebnis der Anwendung einer Funktion auf jedes Element, ohne einen neuen Ausdruck zu konstruieren.

In[24]:= Scan[Print, {a, b, c}]

Scan betrachtet die Teile eines Ausdrucks in einem Tiefendurchlauf, also als erstes die Blätter.

In[25]:= Scan[Print, 1 + x^2, Infinity]

Anwendung von Funktionen auf Listen und andere AusdrückeReine Funktionen