Greedy adaptive dictionary (GAD) for supervised machine learning
I haven't read the paper so don't necessarily understand the algorithm, but this seems wrong to me:

    # 3. Find residual column (l1 to l2 norm ratio)
    min_eps = float('inf') # to search min initialize to infinite
    j_min   =   -1
    for j in range(X.shape[1]): 
        norma1 = norma2 = 0
        for i in range(X.shape[0]): 
            norma1 += abs(X[i][j])
            norma2 += (X[i][j])**2
        norma2 = math.sqrt(norma2)
        eps = norma1/norma2   # sparsity index
        if min_eps &gt; eps and j not in I: #excludes if already inserted
            min_eps=eps
            j_min = j


The pseudocode says to find the column of \${\mathbf R}^l\$ with minimum ratio, but this code finds the column of \$\mathbf X\$ with minimum ratio.

Have you tested your code and made sure it returns the correct result?