Die Einstein -Summierung

Tensoroperationen in Python
Einstein -Summierungstechniken
Numpy- und Tensor -Flussbeispielen
Die Einstein -Summierung cover image

Die Einstein -Summationsnotation ist eine kurze und leistungsstarke Möglichkeit, Tensoroperationen darzustellen, die häufig in Physik und maschinellem Lernen verwendet werden. Es ermöglicht uns, komplexe Berechnungen auf Tensoren in kompakter Form zu schreiben. Wir werden die Grundlagen zur Einstein -Summierung abdecken, wie man sie in Python mit Numpy und Tensorflow verwendet und Beispiele zur Veranschaulichung seiner Verwendung angeben.

Grundlagen der Einstein -Summation

Die Einstein -Summationsnotation (Ein -Einsum) basiert auf der Idee, über wiederholte Indizes in Tensorausdrücken zu summieren. Es basiert auf den folgenden zwei Regeln:

1. Summierung über wiederholte Indizes: Wenn ein Index zweimal in einem Term erscheint, wird er übersät

2. Freie Indizes: Indizes, die nur einmal erscheinen, sind freie Indizes und stellen die Achsen des Ausgangszensors dar

Veranschaulichen wir dies mit dem Beispiel, zwei Matrizen A und B zu multiplizieren: Die resultierende Matrix C wird definiert als

Cik=jAijBjkC_{ik} = \sum\limits_{j}^{}A_{ij}B_{jk}

In Python bieten sowohl die Numpy- als auch die Tensorflow -Bibliotheken eine Ein -Einsum -Funktion.

Numpy

import numpy as np

# Define two matrices A and B
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Perform matrix multiplication using einsum
C = np.einsum('ij,jk->ik', A, B)

print(C)
# [[19 22]
#  [43 50]]

Im obigen Beispiel ist ij,jk->ik die Einsum -Zeichenfolge:

ij repräsentiert die Indizes der Matrix a

jk repräsentiert die Indizes von Matrix B

->ik Gibt die Indizes der Ausgangsmatrix C an

Die Operation fasst den Index j zusammen

Der gleiche Code in TensorFlow würde so aussehen wie

import tensorflow as tf

# Define two matrices A and B
A = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
B = tf.constant([[5, 6], [7, 8]], dtype=tf.float32)

# Perform matrix multiplication using einsum
C = tf.einsum('ij,jk->ik', A, B)

print(C)
# tf.Tensor(
# [[19. 22.]
#  [43. 50.]], shape=(2, 2), dtype=float32)

Mehr Beispiele

Inneres Produkt von Vektoren

Das innere Produkt (Punktprodukt) von zwei Vektoren A und B ist definiert als

c=iaibic = \sum\limits_{i}^{}a_{i}b_{i}

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

c = np.einsum('i,i->', a, b)

print(c)  # Output: 32

Außenprodukt von Vektoren

Das äußere Produkt von zwei Vektoren A und B ist gegeben durch:

Cij=aibjC_{ij} = a_{i}b_{j}

C = np.einsum('i,j->ij', a, b)

print(C)
# Output
# [[4 5 6]
#  [8 10 12]
#  [12 15 18]]

Transponierung einer Matrix

Die Transponierung einer Matrix A kann durch Austausch ihrer Indizes erhalten werden

A_transpose = np.einsum('ij->ji', A)

print(A_transpose)
# Output
# [[1. 3.]
#  [2. 4.]]

Trace einer Matrix

Die Spur einer Matrix A ist die Summe seiner diagonalen Elemente:

Tr(A)=iAiiAiiTr(A) = \sum\limits_{i}^{}A_{ii}A_{ii}


trace = np.einsum('ii->', A)

print(trace)
# Output: 5.0

Stapelmatrix -Multiplikation

Einsum ist besonders nützlich für Stapeloperationen. Angenommen, wir haben eine Reihe von Matrizen A und B, und wir möchten die entsprechenden Matrizen in der Charge multiplizieren:


A = np.random.rand(3, 2, 2)
B = np.random.rand(3, 2, 2)

# Perform batch matrix multiplication
C = np.einsum('bij,bjk->bik', A, B)

print(C)

Hier repräsentiert b die Stapeldimension.

Vorteile der Einsum -Notation

1. SUPCISSINITY: Die Einsum -Notation ist kompakt und kann komplexe Operationen prägnant darstellen

2. Flexibilität: Es kann eine Vielzahl von Tensoroperationen behandeln, ohne explizit umzugestalten oder Arrays zu transponieren

3. Effizienz: Viele Bibliotheken optimieren die Einsum -Operationen intern und führen möglicherweise zu einer besseren Leistung.


Career Services background pattern

Karrieredienste

Contact Section background image

Lass uns in Kontakt bleiben

Code Labs Academy © 2025 Alle Rechte vorbehalten.