def evaluator(shape, density, r, iters=10): index_sets = [generate_sorted_sigma_set(shape, density) for _ in range(iters)] ur, vr = np.random.normal(size=(shape[0], r)), np.random.normal(size=(r, shape[1])) elem = ManifoldElement((ur, vr), r) timings = np.zeros(iters) for it in range(iters): timings[it] = timeit.Timer(lambda: elem.evaluate(index_sets[it])).timeit(number=1) print('next timing: %s' % timings[it]) print(timings) print('min: %s, mean: %s, max: %s' % (timings.min(), timings.mean(), timings.max())) return None
def obvious_test(shape, r, niter=10): percent = 0.5 sigma_set = generate_sigma_set(shape, percent) a_full = shape[1]*np.arange(shape[0])[:, None] + np.arange(shape[1]) a_sparse = lil_matrix(shape) for (i, j) in zip(*sigma_set): a_sparse[i, j] = a_full[i, j] a_sparse = csr_matrix(a_sparse) x = ManifoldElement.rand(shape, r) grad = riemannian_grad_partial(x, a_sparse, sigma_set, manifold_elems=True) new_grad = vector_transport_base(x, x, grad) for elem, new_elem in zip(grad, new_grad): assert(np.allclose(elem.full_matrix(), new_elem.full_matrix()))