def psi1compDer(dL_dpsi1, _psi1, variance, lengthscale, Z, mu, S):
# here are the "statistics" for psi1
# Produced intermediate results: dL_dparams w.r.t. psi1
# _dL_dvariance 1
# _dL_dlengthscale Q
# _dL_dZ MxQ
# _dL_dgamma NxQ
# _dL_dmu NxQ
# _dL_dS NxQ
lengthscale2 = np.square(lengthscale)
Lpsi1 = dL_dpsi1 * _psi1
Zmu = Z[None, :, :] - mu[:, None, :] # NxMxQ
denom = 1. / (S + lengthscale2)
Zmu2_denom = np.square(Zmu) * denom[:, None, :] # NxMxQ
_dL_dvar = Lpsi1.sum() / variance
_dL_dmu = np.einsum('nm,nmq,nq->nq', Lpsi1, Zmu, denom)
_dL_dS = np.einsum('nm,nmq,nq->nq', Lpsi1, (Zmu2_denom - 1.), denom) / 2.
_dL_dZ = -np.einsum('nm,nmq,nq->mq', Lpsi1, Zmu, denom)
_dL_dl = np.einsum('nm,nmq,nq->q', Lpsi1, (Zmu2_denom +
(S / lengthscale2)[:, None, :]), denom * lengthscale)
return _dL_dvar, _dL_dl, _dL_dZ, _dL_dmu, _dL_dS
评论列表
文章目录