'Adjoint matrix-vector multiplication.
Performs the operation y = A^H * x where A is an MxN linear
operator and x is a column vector or 1-d array.
Parameters
x : {matrix, ndarray}
An array with shape (M,) or (M,1).
Returns
y : {matrix, ndarray}
A matrix or ndarray with shape (N,) or (N,1) depending
on the type and shape of the x argument.
Notes
This rmatvec wraps the user-specified rmatvec routine or overridden
_rmatvec method to ensure that y has the correct shape and type.'

def rmatvec(self, x):

    x = np.asanyarray(x)
    (M, N) = self.shape
    if ((x.shape != (M,)) and (x.shape != (M, 1))):
        raise ValueError('dimension    mismatch')
    y = self._rmatvec(x)
    if isinstance(x, np.matrix):
        y = np.asmatrix(y)
    else:
        y = np.asarray(y)
    if (x.ndim == 1):
        y = y.reshape(N)
    elif (x.ndim == 2):
        y = y.reshape(N, 1)
    else:
        raise ValueError('invalid    shape    returned    by    user-defined    rmatvec()')
    return y
