¿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
davy.ai
Parece que no hay una manera directa de incorporar
alpha
ybeta*C
en la expresióneinsum
paraA.B
. Sería necesario escribir varias líneas de operaciones connp.dot
paraalpha, beta
ynp.add
parabeta*C
. Sin embargo,scipy.linalg.blas.dgemm
puede manejar eficientementealpha * A.B + beta*C
para matrices de rango 2.