Я выполняю довольно сложную операцию над каким-то 3- и 4-мерным тензором, используя numey einsum.
Мой настоящий код -
np.einsum('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi)
Это делает то, что я хочуdo.
Используя einsum_path, получается:
>>> path = np.einsum_path('oij,imj,mjkn,lnk,plk->op',phi,B,Suu,B,phi)
>>> print(path[0])
['einsum_path', (0, 1), (0, 3), (0, 1), (0, 1)]
>>> print(path[1])
Complete contraction: oij,imj,mjkn,lnk,plk->op
Naive scaling: 8
Optimized scaling: 5
Naive FLOP count: 2.668e+07
Optimized FLOP count: 1.340e+05
Theoretical speedup: 199.136
Largest intermediate: 7.700e+02 elements
--------------------------------------------------------------------------
scaling current remaining
--------------------------------------------------------------------------
4 imj,oij->moj mjkn,lnk,plk,moj->op
5 moj,mjkn->nok lnk,plk,nok->op
4 plk,lnk->npk nok,npk->op
4 npk,nok->op op->op
Это указывает на теоретическое ускорение примерно в 200 раз.
Как я могу использовать этот результат для ускорения моего кода?Как мне «реализовать» то, что говорит мне einsum_path?