def has_constant(x):
"""
Parameters
----------
x: ndarray
Array to be checked for a constant (n,k)
Returns
-------
const : bool
Flag indicating whether x contains a constant or has column span with
a constant
loc : int
Column location of constant
"""
if np.any(np.all(x == 1, axis=0)):
loc = np.argwhere(np.all(x == 1, axis=0))
return True, int(loc)
if np.any((np.ptp(x, axis=0) == 0) & ~np.all(x == 0, axis=0)):
loc = np.any((np.ptp(x, axis=0) == 0) & ~np.all(x == 0, axis=0))
loc = np.argwhere(loc)
return True, int(loc)
n = x.shape[0]
aug_rank = matrix_rank(np.c_[np.ones((n, 1)), x])
rank = matrix_rank(x)
has_const = bool(aug_rank == rank)
loc = None
if has_const:
out = np.linalg.lstsq(x, np.ones((n, 1)))
beta = out[0].ravel()
loc = np.argmax(np.abs(beta) * x.var(0))
return has_const, loc
评论列表
文章目录