“Conocimiento Programación>Python Programming

¿Cómo se puede utilizar NP.Tensordot para realizar operaciones de productos Tensor DOT de manera eficiente en Python?

2013/5/8
`np.tensordot` proporciona una forma flexible de realizar contracciones tensoras (productos DOT generalizados) en Numpy, significativamente más eficientemente que implementar bucles anidados manualmente para tensores más grandes. Su eficiencia se deriva de aprovechar las rutinas optimizadas de BLA (subprogramas de álgebra lineal básica) debajo del capó.

Así es como funciona `np.tensordot` y cómo usarlo de manera eficiente:

Comprender el parámetro de ejes:

El núcleo de `np.tensordot` se encuentra en su parámetro` ejes`. Este parámetro especifica qué ejes de las matrices de entrada (`a` y` b`) deben sumarse durante el producto DOT. Puede ser:

* un entero: Esto especifica el número de ejes a sumar desde el * final * de cada matriz. Si `Axes =1`, resume sobre el último eje de` A` y el último eje de 'B`. Si `ejes =2`, resume sobre los dos últimos ejes de cada uno, y así sucesivamente. Esta es la forma más simple.

* Una tupla de dos secuencias: Esto proporciona el mayor control. Cada secuencia especifica los ejes de `A` y` B` respectivamente, que deben contratarse (sumarse). Las longitudes de las secuencias deben ser iguales.

Ejemplos:

1. Producto de punto simple (multiplicación de matriz):

`` `Python

importar numpy como np

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

b =np.array ([[5, 6], [7, 8]])

Multiplicación de matriz estándar (ejes =1 implícitamente)

c =np.tensordot (a, b, ejes =1) # equivalente a np.dot (a, b)

Imprimir (c) # Salida:[[19 22] [43 50]]

Especificar ejes explícitamente

c =np.tensordot (a, b, axes =((1), (0))) #same como arriba

Imprimir (c) # Salida:[[19 22] [43 50]]

`` `` ``

2. Contracción del tensor con tensores de orden superior:

`` `Python

a =np.arange (24) .Reshape ((2,3,4))

b =np.arange (24) .Reshape ((4,3,2))

suma sobre el último eje de 'A' y el primer eje de 'B'

c =np.tensordot (a, b, ejes =([2], [0]))

Imprimir (C.Shape) # Salida:(2, 3, 3, 2)

#Más compleja contracción:

c =np.tensordot (a, b, ejes =([(0,2)], [(1,0)]))

Imprimir (C.Shape) #Output:(3, 2)

`` `` ``

3. Einstein Notación de suma equivalente:

`np.tensordot` realiza efectivamente operaciones similares a la notación de suma de Einstein. Por ejemplo, si `a` is (i, j, k) y` b` is (k, l), entonces la contracción sobre `k` puede escribirse como:

`C_ {ijl} =\ sum_k a_ {ijk} b_ {kl}`

Esto se puede lograr de manera eficiente con:

`` `Python

a =np.random.rand (2,3,4)

b =np.random.rand (4,5)

c =np.tensordot (a, b, ejes =([2], [0]))

Imprimir (C.Shape) # Salida:(2, 3, 5)

`` `` ``

Consideraciones de eficiencia:

* Orden de ejes: El orden en que especifica los ejes puede afectar el rendimiento. Las optimizaciones internas de Numpy podrían ser más efectivas con ciertos pedidos. Experimente para encontrar la configuración más rápida para sus tensores específicos.

* Uso de la memoria: Para tensores extremadamente grandes, `np.tensordot` podría conducir a problemas de memoria. En tales casos, considere el uso de métodos iterativos o bibliotecas diseñadas para operaciones tensoras a gran escala (como TensorFlow o Pytorch), que a menudo tienen mejores estrategias de gestión de memoria.

* Alternativa para casos simples: Para productos de puntos o multiplicaciones de matriz simples, el operador `np.dot` o`@`suele ser más rápido que` np.tensordot`.

En resumen, `np.tensordot` es una herramienta poderosa, pero comprender el parámetro 'Axes` es crucial para el uso eficiente y correcto. Elija el método correcto en función de la complejidad de sus operaciones tensoras y el tamaño de sus datos para optimizar tanto la velocidad como el uso de la memoria.

Python Programming
Cómo hacer un VAR global en Python
Cómo encontrar el número máximo y mínimo en Python
Cómo utilizar My Scripts Python con Blender
Cómo establecer la ruta Python
Cómo utilizar las matemáticas en Python
Hacer histogramas en Python
¿Qué es Lawson erp?
Cómo seleccionar los mensajes de texto en MFC
Conocimiento de la computadora © http://www.ordenador.online