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)
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
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)
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)