Penjumlahan Einstein

Operasi Tensor dengan Python
Teknik Penjumlahan Einstein
Contoh Aliran Numpy dan Tensor
Penjumlahan Einstein cover image

Notasi Penjumlahan Einstein adalah cara ringkas dan ampuh untuk merepresentasikan operasi tensor, yang sering digunakan dalam fisika dan pembelajaran mesin. Hal ini memungkinkan kita untuk menulis perhitungan kompleks pada tensor dalam bentuk yang ringkas. Kami akan membahas dasar-dasar penjumlahan Einstein, cara menggunakannya dalam Python dengan Numpy dan Tensorflow, dan memberikan contoh untuk mengilustrasikan penggunaannya.

Dasar-dasar Penjumlahan Einstein

Notasi Penjumlahan Einstein (Einsum) didasarkan pada gagasan menjumlahkan indeks berulang dalam ekspresi tensor. Hal ini didasarkan pada dua aturan berikut:

1. Penjumlahan atas indeks yang berulang: Jika sebuah indeks muncul dua kali dalam satu suku, maka indeks tersebut akan dijumlahkan

2. Indeks bebas: Indeks yang muncul hanya sekali adalah indeks bebas dan mewakili sumbu tensor keluaran

Mari kita ilustrasikan hal ini dengan contoh mengalikan dua matriks A dan B: matriks C yang dihasilkan didefinisikan sebagai

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

Di Python, pustaka Numpy dan Tensorflow menyediakan fungsi einsum.

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]]

Pada contoh di atas, ij,jk->ik adalah string einsum:

ij mewakili indeks matriks A

jk mewakili indeks matriks B

->ik menentukan indeks matriks keluaran C

Operasi ini merangkum indeks j

Kode yang sama di Tensorflow akan terlihat seperti ini

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)

Lebih Banyak Contoh

Hasil kali dalam vektor

Hasil kali dalam (perkalian titik) dari dua vektor a dan b didefinisikan sebagai

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

Produk Luar Vektor

Hasil kali luar dua vektor a dan b diberikan oleh:

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]]

Transpos Matriks

Transpos matriks A dapat diperoleh dengan menukar indeksnya

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

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

Jejak Matriks

Jejak matriks A adalah jumlah elemen diagonalnya:

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


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

print(trace)
# Output: 5.0

Perkalian Matriks Batch

Einsum sangat berguna untuk operasi batch. Misalkan kita mempunyai sekumpulan matriks A dan B, dan kita ingin mengalikan matriks-matriks yang bersesuaian dalam kumpulan tersebut:


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)

Di sini, b mewakili dimensi batch.

Keuntungan Notasi Einsum

1. Ringkasnya: Notasi Einsum ringkas, dan dapat merepresentasikan operasi kompleks secara ringkas

2. Fleksibilitas: Dapat menangani berbagai macam operasi tensor tanpa secara eksplisit membentuk ulang atau mentransposisi array

3. Efisiensi: Banyak perpustakaan mengoptimalkan operasi einsum secara internal, sehingga berpotensi menghasilkan kinerja yang lebih baik.


Career Services background pattern

Layanan Karir

Contact Section background image

Mari tetap berhubungan

Code Labs Academy © 2025 Semua hak dilindungi undang-undang.