Hi,
I was wondering if someone could provide some intuition on the performance of einsum?
I have found that sometimes it is extremely efficient but sometimes it is several orders of magnitudes slower compared to some other approaches, for instance, using multiple dotcalls.
My intuition is that the computation time of einsum is linear with respect to the size of the "index space", that is, the product of the maximums of the indices.
So, for instance computing the dot product of three matrices A*B*C would not be efficient as einsum('ij,jk,kl>il', A, B, C) because there are four indices i=1,...,I, j=1,...,J, k=1,...,K and l=1,...,L so the total computation time is O(I*J*K*L) which is much worse than with two dot products O(I*J*K+J*K*L), or with two einsumcalls for Y=A*B and Y*C.
On the other hand, computing einsum('ij,ij,ij>i', A, B, C) would be "efficient" because the computation time is only O(I*J).
Is this intuition roughly correct or how could I intuitively understand when the usage of einsum is bad?
Best regards, Jaakko
participants (1)

Jaakko Luttinen