Tensor subselectiom

Hi!
Given an ITensor of N dimensions, how can I extract the first N-1 dimensions, at a fixed index for the last one?

I have a tensor:


ITensor ord=5 (dim=1|id=960|"Link,l=11") (dim=8|id=661|"Boson,Site,n=11") (dim=8|id=538|"Boson,Site,n=10") (dim=1|id=530|"Link,l=9") (dim=64|id=712|"Link,eigen")
NDTensors.Dense{Float64, Vector{Float64}}

and I would want:


ITensor ord=4 (dim=1|id=960|"Link,l=11") (dim=8|id=661|"Boson,Site,n=11") (dim=8|id=538|"Boson,Site,n=10") (dim=1|id=530|"Link,l=9") 
NDTensors.Dense{Float64, Vector{Float64}}

at a given index of Link,eigen index.

Thank you!

Would something like this work?

julia> i, j, k, l = Index.((2, 3, 4, 5))
((dim=2|id=906), (dim=3|id=19), (dim=4|id=39), (dim=5|id=733))

julia> A = randomITensor(i, j, k, l)
ITensor ord=4 (dim=2|id=906) (dim=3|id=19) (dim=4|id=39) (dim=5|id=733)
NDTensors.Dense{Float64, Vector{Float64}}

julia> B = A * onehot(l=>1)
ITensor ord=3 (dim=2|id=906) (dim=3|id=19) (dim=4|id=39)
NDTensors.Dense{Float64, Vector{Float64}}

(onehot docs)

2 Likes

It works, thank you so much!

1 Like