Einsteinen batuketa

Tentsore-eragiketak Python-en
Einstein-en batuketa-teknikak
Numpy eta tentsore-fluxuaren adibideak
Einsteinen batuketa cover image

Einstein Summation notazioa tentsore-eragiketak irudikatzeko modu zehatza eta indartsua da, sarritan fisikan eta ikaskuntza automatikoan erabiltzen dena. Tentsoreen gaineko kalkulu konplexuak forma trinkoan idazteko aukera ematen digu. Einstein-en batuketaren inguruko oinarriak landuko ditugu, Python-en nola erabili Numpy eta Tensorflow-ekin eta adibideak emango ditugu erabilera ilustratzeko.

Einstein-en batuketaren oinarriak

Einstein Summation notazioa (Einsum) tentsore-adierazpenetan indize errepikatuen gainean batuketaren ideian oinarritzen da. Bi arau hauetan oinarritzen da:

1. Indize errepikatuen gaineko batuketa: Indize bat termino batean bi aldiz agertzen bada, baino gehiago batzen da.

2. Indize askeak: Behin bakarrik agertzen diren indizeak indize askeak dira eta irteerako tentsorearen ardatzak adierazten dituzte

Azal dezagun hori A eta B bi matrize biderkatzeko adibidearekin: ondoriozko C matrizea honela definitzen da.

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

Python-en, Numpy eta Tensorflow liburutegiek einsum funtzioa eskaintzen dute.

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

Goiko adibidean, ij,jk->ik einsum katea da:

ij A matrizearen indizeak adierazten ditu

jk B matrizearen indizeak adierazten ditu

->ik irteerako C matrizearen indizeak zehazten ditu

Eragiketak j indizearen gaineko batuketak egiten ditu

Tensorflow-en kode bera izango litzateke

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)

Adibide gehiago

Bektoreen barne produktua

a eta b bi bektoreren barne produktua (puntu produktua) honela definitzen da

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

Bektoreen kanpoko produktua

a eta b bi bektoreren kanpoko produktua honako hau da:

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

Matrize baten transposizioa

A matrize baten transposizioa bere indizeak trukatuz lor daiteke

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

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

Matrize baten arrastoa

A matrize baten arrastoa bere elementu diagonalen batura da:

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


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

print(trace)
# Output: 5.0

Batch Matrix Biderketa

Einsum bereziki erabilgarria da batch eragiketetarako. Demagun A eta B matrize sorta bat dugula eta lotean dagozkion matrizeak biderkatu nahi ditugula:


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)

Hemen, "b" lotearen dimentsioa adierazten du.

Einsum Notazioaren abantailak

1. Laburtasuna: Einsum notazioa trinkoa da, eta eragiketa konplexuak laburki adieraz ditzake

2. Malgutasuna: tentsore-eragiketa ugari kudea ditzake matrizeak esplizituki birmoldatu edo transposatu gabe

3. Eraginkortasuna: Liburutegi askok barnean optimizatzen dituzte einsum eragiketak, eta potentzialki errendimendu hobea lortzen dute.


Career Services background pattern

Lanbide Zerbitzuak

Contact Section background image

Jarrai gaitezen harremanetan

Code Labs Academy © 2025 Eskubide guztiak erreserbatuta.