diff --git a/GPy/util/linalg.py b/GPy/util/linalg.py index 769624ee..2f4c4115 100644 --- a/GPy/util/linalg.py +++ b/GPy/util/linalg.py @@ -322,7 +322,12 @@ def cholupdate(L,x): N = x.size weave.inline(code, support_code=support_code, arg_names=['N','L','x'], type_converters=weave.converters.blitz) -def backsub_both_sides(L, X): +def backsub_both_sides(L, X,transpose='left'): """ Return L^-T * X * L^-1, assumuing X is symmetrical and L is lower cholesky""" - tmp, _ = linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(X), lower=1, trans=1) - return linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(tmp.T), lower=1, trans=1)[0].T + if transpose=='left': + tmp, _ = linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(X), lower=1, trans=1) + return linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(tmp.T), lower=1, trans=1)[0].T + else: + tmp, _ = linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(X), lower=1, trans=0) + return linalg.lapack.flapack.dtrtrs(L, np.asfortranarray(tmp.T), lower=1, trans=0)[0].T +