def test_Hstack(self): shape = [5] I = linop.Identity(shape) x1 = util.randn(shape) x2 = util.randn(shape) x = util.vec([x1, x2]) A = linop.Hstack([I, I]) npt.assert_allclose(A(x), x1 + x2) self.check_linop_linear(A) self.check_linop_adjoint(A) self.check_linop_normal(A) self.check_linop_pickleable(A) shape = [5, 3] I = linop.Identity(shape) x1 = util.randn(shape) x2 = util.randn(shape) x = np.concatenate([x1, x2], axis=1) A = linop.Hstack([I, I], axis=1) npt.assert_allclose(A(x), x1 + x2) self.check_linop_linear(A) self.check_linop_adjoint(A) self.check_linop_normal(A) self.check_linop_pickleable(A)
def _prox(self, alpha, input): if np.isscalar(alpha): alphas = [alpha] * self.nops else: alphas = util.split(alpha, self.shapes) inputs = util.split(input, self.shapes) outputs = [prox(alpha, input) for prox, input, alpha in zip(self.proxs, inputs, alphas)] output = util.vec(outputs) return output
def test_Vstack(self): shape = [5] I = linop.Identity(shape) x = util.randn(shape) A = linop.Vstack([I, I]) npt.assert_allclose(A(x), util.vec([x, x])) self.check_linop_linear(A) self.check_linop_adjoint(A) self.check_linop_pickleable(A) shape = [5, 3] I = linop.Identity(shape) x = util.randn(shape) A = linop.Vstack([I, I], axis=1) npt.assert_allclose(A(x), np.concatenate([x, x], axis=1)) self.check_linop_linear(A) self.check_linop_adjoint(A) self.check_linop_pickleable(A)