API · NumPy

Python-Funktion NumPy numpy.linalg.norm()

Erfahren Sie, wie numpy.linalg.norm() Vektor- und Matrixnormen berechnet und wie ord, axis und keepdims das Ergebnis beeinflussen.

Auf dieser Seite

Mit numpy.linalg.norm() lässt sich die Norm eines Arrays berechnen. Die Eingabeform und die Argumente bestimmen, ob der Aufruf eine Vektornorm, eine Matrixnorm oder mehrere Normen entlang ausgewählter Achsen berechnet. Das Argument ord wählt die Definition der Norm aus; es entscheidet nicht, ob die Eingabe als Vektor oder Matrix behandelt wird.

Syntax und Parameter von numpy.linalg.norm()

Die Funktionssignatur lautet:

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)
  • x ist die arrayähnliche Eingabe, deren Norm berechnet wird.
  • ord wählt die Definition der Norm aus. Der Standardwert None verwendet bei einem Vektor die euklidische Norm und bei einer Matrix die Frobeniusnorm. Welche Werte unterstützt werden, hängt davon ab, ob eine Vektor- oder Matrixnorm berechnet wird. Die vollständige Liste finden Sie in der NumPy-Referenz.
  • axis legt die Berechnungsachsen fest. Eine Ganzzahl wählt eine Achse aus und berechnet entlang dieser Vektornormen. Ein Tupel aus zwei Ganzzahlen wählt zwei Achsen aus und berechnet über diese Matrixnormen. Sind sowohl axis=None als auch ord=None, berechnet NumPy die Norm der abgeflachten Eingabe, auch wenn sie mehr als zwei Dimensionen hat. Bei einer höherdimensionalen Eingabe übergeben Sie eine Ganzzahl für axis, um entlang dieser Achse Vektornormen zu berechnen, oder ein Tupel aus zwei Achsen, um für jeden verbleibenden Ausschnitt Matrixnormen über diese Achsen zu berechnen.
  • keepdims hat standardmäßig den Wert False. Bei True bleiben die für die Berechnung verwendeten Achsen im Ergebnis mit der Größe eins erhalten. Das kann das Broadcasting mit dem ursprünglichen Array erleichtern.

Ohne Achsenauswahl ist das Ergebnis einer Vektor- oder Matrixnorm ein Skalar. Wenn axis mehrere Ausschnitte auswählt, ist das Ergebnis ein Array mit einer Norm pro Ausschnitt. Mit keepdims=True bleiben die reduzierten Achsen als Dimensionen der Größe eins erhalten.

Vektor- und Matrixnormen berechnen

Bei einer eindimensionalen Eingabe ist die euklidische Vektornorm der Standard: die Quadratwurzel aus der Summe der quadrierten Elemente. Bei einer zweidimensionalen Eingabe ist die Frobeniusnorm der Matrix der Standard; dabei wird dieselbe Berechnung auf alle Matrixeinträge angewendet. Dieses eigenständige Beispiel zeigt beide Berechnungen:

import numpy as np

vector = np.array([3, 4])
matrix = np.array([[3, 4], [0, 12]])

print(np.linalg.norm(vector))
print(np.linalg.norm(matrix))
5.0
13.0

Der erste Skalar ist die euklidische Norm des Vektors [3, 4]. Der zweite ist die Frobeniusnorm der Matrix, berechnet über alle vier Einträge.

Mit ord eine Norm auswählen

Für Vektoren wählt ord gängige Definitionen aus: 2 steht etwa für die euklidische Norm, 1 für die Summe der Absolutwerte und np.inf für das größte Element nach Absolutwert. Für Matrizen wählt ord="fro" die Frobeniusnorm aus; ord="nuc" wählt die Kernnorm, also die Summe der Singulärwerte der Matrix. Die Schreibweise lautet nuc; nuuc ist kein unterstützter Alias.

Das folgende Beispiel vergleicht die Frobeniusnorm und die Kernnorm derselben Matrix:

import numpy as np

matrix = np.array([[1, 2], [3, 4]])
print(np.linalg.norm(matrix, ord="fro"))
print(np.linalg.norm(matrix, ord="nuc"))
5.477225575051661
5.8309518948453

Der erste Wert ist die Frobeniusnorm; der zweite ist die Kernnorm, also die Summe der Singulärwerte der Matrix.

Wählen Sie für eine Matrixberechnung einen passenden Matrixwert für ord. Hat die Eingabe mehr als zwei Dimensionen, wählen Sie die Achsen ausdrücklich aus, wenn Sie eine Vektor- oder Matrixnorm berechnen möchten. Welche Kombinationen unterstützt werden, hängt von der gewählten Normdefinition und der NumPy-Version ab.

Achsen auswählen und Dimensionen beibehalten

Bei einem Array mit der Form (rows, columns) berechnet axis=0 für jede Spalte eine Vektornorm, während axis=1 dies für jede Zeile tut. Um eine Matrixnorm über beide Dimensionen zu berechnen, übergeben Sie axis=(0, 1):

import numpy as np

matrix = np.array([[3, 4], [0, 12]])
print(np.linalg.norm(matrix, axis=0))
print(np.linalg.norm(matrix, axis=1))
print(np.linalg.norm(matrix, axis=(0, 1), keepdims=True).shape)
[ 3.         12.64911064]
[ 5. 12.]
(1, 1)

Das erste Array enthält die Vektornormen der beiden Spalten, das zweite die Vektornormen der beiden Zeilen. Das abschließende Tupel gibt die Form des Ergebnisses der Matrixnorm mit keepdims=True an. Die reduzierten Achsen bleiben als Dimensionen der Größe eins erhalten und können später für Broadcasting verwendet werden. Wählen Sie bei höherdimensionalen Arrays die Achsen aus, die den jeweiligen Vektor- oder Matrixausschnitt bilden.