Converting MPS to State Vector
Converting MPS to State Vector
Bear in mind that I just started learning about MPS and DMRG, hence this might be a stupid question. Is it possible to obtain the state vector representation of a quantum state provided that we have the MPS representation? Basically, can we convert a given MPS ground state to the linear superposition of all the product states (basis states spanning the Hilbert space), i.e., ending up having a vector with dim(H) entries?
Re: Converting MPS to State Vector
Formally yes, you can do it by just contracting all the tensors of the MPS, leaving the physical legs open. Depending on your preferred form, you might want to combine the L physical legs of dimension \(d\) into a single, big leg of dimension \(dim(\mathcal{H})= d^L\), but this is essentially just a reshaping of the state vector.
In practice, however, no this is exactly what you don't want to do: it requires arrays with the exponentially large Hilbert space dimension. The hole point of tensor networks in general is to bring down the memory requirements from exponentially many numbers (= full Hilbert space dimension) to just polynomially many, and whatever we do, we try to do it locally, i.e. for MPS contracting the tensor networks for expectation values etc coming from the left/right, instead top to bottom.
That being said, of course you still can do the contraction when your system size is small enough - basically, whenever you can do exact diagonalization, so L =10-20 (of you really push it and only need pure states, not operators, about 30 to maybe 40 with big enough computers).
The easiest way to do it in TeNPy is just to call
A bit of wrapping on top of that is done in
In practice, however, no this is exactly what you don't want to do: it requires arrays with the exponentially large Hilbert space dimension. The hole point of tensor networks in general is to bring down the memory requirements from exponentially many numbers (= full Hilbert space dimension) to just polynomially many, and whatever we do, we try to do it locally, i.e. for MPS contracting the tensor networks for expectation values etc coming from the left/right, instead top to bottom.
That being said, of course you still can do the contraction when your system size is small enough - basically, whenever you can do exact diagonalization, so L =10-20 (of you really push it and only need pure states, not operators, about 30 to maybe 40 with big enough computers).
The easiest way to do it in TeNPy is just to call
psi.get_theta(0, L)
.A bit of wrapping on top of that is done in
tenpy.algorithms.exact_diag.ExactDiagonalization.mps_to_full
. Since this is just used for testing and out of the intended scope of using the library, it's not even documented.Re: Converting MPS to State Vector
Thank you very much. After posting the question I actually wrote my own routine and I just wanted to make a comparison.