def kfucompDer(dL_dkfu, kfu, variance, lengthscale, Z, mu, grad_x):
# here are the "statistics" for psi1
# Produced intermediate results: dL_dparams w.r.t. psi1
# _dL_dvariance 1
# _dL_dlengthscale Q
# _dL_dZ MxQ
lengthscale2 = np.square(lengthscale)
Lpsi1 = dL_dkfu * kfu
Zmu = Z[None, :, :] - mu[:, None, :] # NxMxQ
_dL_dvar = Lpsi1.sum() / variance
_dL_dZ = -np.einsum('nm,nmq->mq', Lpsi1, Zmu / lengthscale2)
_dL_dl = np.einsum('nm,nmq->q', Lpsi1, np.square(Zmu) / lengthscale**3)
if grad_x:
_dL_dx = np.einsum('nm,nmq->nq', Lpsi1, Zmu / lengthscale2)
return _dL_dvar, _dL_dl, _dL_dZ, _dL_dx
else:
return _dL_dvar, _dL_dl, _dL_dZ
评论列表
文章目录