# Obtaining Elements of a Tensor Represented as an MPS

A matrix product state (MPS) or tensor train (TT) is a format for representing a large tensor having N indices in terms of N smaller tensors. Given an MPS represeting a tensor $T$ we can obtain a particular element $T^{s_1 s_2 s_3 \cdots s_N}$ of that tensor using code similar to the following code below.

In this code we will obtain the element $T^{1,2,1,1,2,1,2,2,2,1}$ of the tensor $T$ which is (implicitly) defined by the MPS psi:

#include "itensor/all.h"
#include "itensor/util/print_macro.h"
using namespace itensor;

int main()
{

//Make a random MPS with N=10 indices (10 sites)
//with each physical index of dimension 2
//and each link index (bond dimension) of dimension 4
auto N = 10;
auto s = SiteSet(N,2);
auto chi = 4;
auto psi = randomMPS(s,chi);

//Make an array of integers of the element we
//want to obtain
auto el = std::vector<int>{{1,2,1,1,2,1,2,2,2,1}};

auto T = ITensor(1.);
for(auto j : range1(N))
{
T *= (psi(j)*setElt(s(j)=el[j-1]));
}
auto val = elt(T);

//"val" is the element we wanted to obtain:
Print(val);

return 0;
}


Back to Formulas
Back to Main