Ejemplo n.º 1
0
def test_itkrmm(initial_data):
    signals, dico = initial_data()
    err1 = LA.norm(signals - np.dot(dico, sparse.omp_batch(signals, dico, 2)))
    masks = np.ones_like(signals)
    new_dico = optimize.itkrmm(signals.copy(),
                               masks,
                               dico,
                               n_nonzero=2,
                               iters=20)
    new_signals = sparse.omp_batch(signals, new_dico, 2)
    err2 = LA.norm(signals - np.dot(new_dico, new_signals))
    assert dico.shape == new_dico.shape
    assert err2 < err1

    lr = optimize.reconstruct_low_rank(signals.copy(),
                                       masks.copy(),
                                       n_low_rank=2)
    newer_dico = optimize.itkrmm(signals.copy(),
                                 masks,
                                 dico,
                                 2,
                                 20,
                                 low_rank=lr)
    newer_signals = sparse.omp_batch(signals.copy(), newer_dico, 2)
    err3 = LA.norm(signals - np.dot(newer_dico, newer_signals))
    assert newer_dico.shape == (dico.shape[0], dico.shape[1] + 2 * lr.shape[1])
    assert err3 < err1

    with pytest.warns(RuntimeWarning):
        masks[:, 1] = 0
        optimize.itkrmm(signals.copy(), masks, dico, 2, 20)
Ejemplo n.º 2
0
def test_odl(initial_data):
    signals, dico = initial_data()
    n_nonzero = 4
    init_codes = sparse.omp_batch(signals, dico, n_nonzero)
    new_dict = optimize.odl(signals, dico, n_nonzero=n_nonzero)
    new_codes = sparse.omp_batch(signals, new_dict, n_nonzero)

    new1 = np.dot(dico, init_codes)
    new2 = np.dot(new_dict, new_codes)

    err1 = LA.norm(signals - new1)
    err2 = LA.norm(signals - new2)
    assert err2 < err1
Ejemplo n.º 3
0
def test_omp_batch_sparse_signal_tol(sparse_signal):
    signals = sparse_signal[:, :20]
    n_atoms = 256
    TOL = 100
    n_threads = 1
    dictionary = utils.dct_dict(n_atoms, 8)
    sparse_c = sparse.omp_batch(signals, dictionary,
                                tol=TOL, n_threads=n_threads)

    c = np.dot(dictionary, sparse_c)
    assert np.all(np.linalg.norm(c - signals, axis=0) < TOL)
Ejemplo n.º 4
0
def test_omp_batch_sparse_signal_n_nonzero(sparse_signal):
    signals = sparse_signal[:, :200]
    n_atoms = 256
    n_nonzero = 10
    n_threads = 1
    dictionary = utils.dct_dict(n_atoms, 8)
    sparse_c = sparse.omp_batch(signals, dictionary,
                                n_nonzero=n_nonzero, n_threads=n_threads)

    # Compare with sklearn
    Xy = np.dot(dictionary.T, signals)
    Gram = np.dot(dictionary.T, dictionary)
    sparse_sk = orthogonal_mp_gram(Gram, Xy, n_nonzero_coefs=n_nonzero)

    assert sparse_c.shape == sparse_sk.shape
    assert np.count_nonzero(sparse_c) <= n_nonzero * signals.shape[1]

    c = np.dot(dictionary, sparse_c)
    sk = np.dot(dictionary, sparse_sk)
    assert np.all(np.linalg.norm(c - sk, axis=0) < 1e-6)