es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Hay algún einsum similar a DGEMM en python?

En DGEMM http://www.netlib.org/lapack/explore-html/d1/d54/groupdoubleblas_level3gaeda3cbd99c8fb834a60a6412878226e1.html#gaeda3cbd99c8fb834a60a6412878226e1 se puede realizar C = alpha * A.B + beta*C

En eimsum, hay ij,jk->ik (o índices más generales) para A.B. ¿Existe alguna forma eficiente de incorporar alpha y beta*C, presumiblemente si A y B son arreglos de rango general? ¿O debo escribir varias líneas de operaciones con np.dot para alpha,beta y np.add para beta*C?

Intenté

na = nb = nc = nd = 50
A = np.random.random((na,nb))
B = np.random.random((nb,nc))
C = np.random.random((na,nc))
np.einsum('ab,bc + ac ->ac',A,B)

Obtuve
ValueError: invalid subscript '+' in einstein sum subscripts string, subscripts must be letters

Parece que scipy.linalg.blas.dgemm puede hacerlo, pero solo para matrices de rango-2 https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.blas.dgemm.html

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que no hay una manera directa de incorporar alpha y beta*C en la expresión einsum para A.B. Sería necesario escribir varias líneas de operaciones con np.dot para alpha, beta y np.add para beta*C. Sin embargo, scipy.linalg.blas.dgemm puede manejar eficientemente alpha * A.B + beta*C para matrices de rango 2.

Comments are closed.