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