Hi,

I am thinking about how to achieve something similar to numpy.einsum in Julia. For instance, if I have a tensor T_{ijk} and a matrix u_{jj'}, I want to get T'_{ijk}= u_{jj'}T_{ij'k}. Also, I want to do things like H_i =\sum_{j}T_{ijj}. How to efficiently do this in Julia? I noticed that there is a package `Einsum.jl`

, is this the best choise? Thanks

1 Like

Maybe TensorOperations.jl and OMEinsum.jl also deserve mention, these are the closest to np.einsum, β they translate into a sequence of permutation and multiplication operations. Whereas Tullio.jl, like Einsum.jl, writes a set of loops from scratch.

They all share the same notation, e.g. `@tensor T2[i,j,k] := u[j,j2] * T[i,j2,k]`

and `@tullio H[i] := T[i,j,j]`

.

3 Likes

Hi Michael, I have a question about `Tullio`

. Suppose I want to contract some indexes of a tensor `T`

, it seems that `@tullio T[i,j] = T[i,j,k,k]`

is not allowed. Is there a way to change `T`

without creating another array to store the calculated result?

The output needs to be smaller than the input. I suppose you could try writing into a view of the same array, `T2 = view(T, :,:,1,1)`

should be the right size. But this seems delicate and I donβt really recommend it. Some views like this will lead to data races & hard to find bugs.