# This function takes the coefficient matrix resulted from sparse # representation using \ell_1 minimization. If a point cannot be written as # a linear combination of other points, it should be an outlier. The # function detects the indices of outliers and modifies the coefficient # matrix and the ground-truth accordingly. # CMat: NxN coefficient matrix # s: Nx1 ground-truth vector # CMatC: coefficient matrix after eliminating Nans # sc: ground-truth after eliminating outliers # OutlierIndx: indices of outliers in {1,2,...,N} # Fail: True if number of inliers is less than number of groups, False otherwise import numpy as np def OutlierDetection(CMat, s): n = np.amax(s) _, N = CMat.shape OutlierIndx = list() FailCnt = 0 Fail = False for i in range(0, N): c = CMat[:, i] if np.sum(np.isnan(c)) >= 1: OutlierIndx.append(i) FailCnt += 1 sc = s.astype(float) sc[OutlierIndx] = np.nan CMatC = CMat.astype(float) CMatC[OutlierIndx, :] = np.nan CMatC[:, OutlierIndx] = np.nan OutlierIndx = OutlierIndx if FailCnt > (N - n): CMatC = np.nan sc = np.nan Fail = True return CMatC, sc, OutlierIndx, Fail if __name__ == "__main__": pass