mparray.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:mpnum 作者: dseuss 项目源码 文件源码
def _compress_svd_r(self, rank, relerr, svdfunc):
        """Compresses the MPA in place from left to right using SVD;
        yields a left-canonical state

        See :func:`~compress` for parameters
        """
        assert rank > 0, "Cannot compress to rank={}".format(rank)
        assert (relerr is None) or ((0. <= relerr) and (relerr <= 1.)), \
            "Relerr={} not allowed".format(relerr)

        for site in range(len(self) - 1):
            ltens = self._lt[site]
            matshape = (-1, ltens.shape[-1])
            if relerr is None:
                u, sv, v = svdfunc(ltens.reshape(matshape), rank)
                rank_t = len(sv)
            else:
                u, sv, v = svd(ltens.reshape(matshape))
                svsum = np.cumsum(sv) / np.sum(sv)
                rank_relerr = np.searchsorted(svsum, 1 - relerr) + 1
                rank_t = min(ltens.shape[-1], u.shape[1], rank, rank_relerr)

            yield sv, rank_t

            newtens = (u[:, :rank_t].reshape(ltens.shape[:-1] + (rank_t, )),
                       matdot(sv[:rank_t, None] * v[:rank_t, :], self._lt[site + 1]))
            self._lt.update(slice(site, site + 2), newtens,
                            canonicalization=('left', None))

        yield np.sum(np.abs(self._lt[-1])**2)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号