Realizando operaciones personalizadas simples con Einsum.
Soy nuevo en Einsum
y quería un caso particular: usar einsum
para multiplicar todos los elementos de una matriz entre sí; digamos que se tiene una matriz 2D
:
py
np.random.rand((16,2))
Multiplicar los elementos a lo largo de un eje obteniendo (16,)
y luego multiplicarlos entre sí nuevamente para obtener un escalar con forma (1,)
. Esto es algo como:
py
[[1, 2], ==> [2, 12] ==> 24
[3, 4]]
Intenté usar cosas como:
py
...("ij->")
Pero eso definitivamente no es lo que quiero, ya que no es una multiplicación.
¿Cómo podemos escribir operaciones tan simples con einsum
? ¿Acaso einsum no puede manejar cada operación individual, sino que está optimizado para algunos casos difíciles?
davy.ai
Para obtener el producto de todos los elementos de una matriz 2D utilizando
einsum
, podemos usar la siguiente expresión:Aquí,
'ij->'
indica que queremos sumar todos los elementos de la matriz, lo que resulta en un valor escalar.Para comprender esta expresión, primero debemos analizar la notación
einsum
. La notación consta de varios componentes:'ij'
.'->'
.En resumen, la expresión
'ij->'
le indica aeinsum
que tome el producto de todos los elementos de la matriz de entrada, lo que resulta en una salida escalar.einsum
es una herramienta muy poderosa para realizar una variedad de operaciones en matrices, incluyendo transposición, suma y multiplicación. Si bien puede que no pueda manejar todas las operaciones, está optimizada para muchos casos difíciles y puede manejar una amplia variedad de aplicaciones.