def _M2_sparse_sym(Xvar, mask_X, Yvar, mask_Y, weights=None):
""" 2nd self-symmetric moment matrix exploiting zero input columns
Computes X'X + Y'Y and X'Y + Y'X
"""
assert len(mask_X) == len(mask_Y), 'X and Y need to have equal sizes for symmetrization'
Cxxyy = np.zeros((len(mask_X), len(mask_Y)))
Cxxyy[np.ix_(mask_X, mask_X)] = _M2_dense(Xvar, Xvar, weights=weights)
Cxxyy[np.ix_(mask_Y, mask_Y)] += _M2_dense(Yvar, Yvar, weights=weights)
Cxyyx = np.zeros((len(mask_X), len(mask_Y)))
Cxy = _M2_dense(Xvar, Yvar, weights=weights)
Cyx = _M2_dense(Yvar, Xvar, weights=weights)
Cxyyx[np.ix_(mask_X, mask_Y)] = Cxy
Cxyyx[np.ix_(mask_Y, mask_X)] += Cyx
return Cxxyy, Cxyyx
评论列表
文章目录