:orphan: # MatCreateCentering Creates a new matrix object that implements the (symmetric and idempotent) centering matrix, I - (1/N) * ones*ones' ## Synopsis ``` #include "petscmat.h" PetscErrorCode MatCreateCentering(MPI_Comm comm, PetscInt n, PetscInt N, Mat *C) ``` Collective ## Input Parameters - ***comm -*** MPI communicator - ***n -*** number of local rows (or `PETSC_DECIDE` to have calculated if `N` is given) This value should be the same as the local size used in creating the y vector for the matrix-vector product y = Ax. - ***N -*** number of global rows (or `PETSC_DETERMINE` to have calculated if `n` is given) ## Output Parameter - ***C -*** the matrix ## Notes The entries of the matrix `C` are not explicitly stored. Instead, the new matrix object is a shell that simply performs the action of the centering matrix, i.e., multiplying C*x subtracts the mean of the vector x from each of its elements. This is useful for preserving sparsity when mean-centering the columns of a matrix is required. For instance, to perform principal components analysis with a matrix A, the composite matrix C*A can be passed to a partial SVD solver. ## See Also [](ch_matrices), `Mat`, `MatCreateLRC()`, `MatCreateComposite()` ## Level intermediate ## Location src/mat/impls/centering/centering.c --- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/impls/centering/centering.c) [Index of all Mat routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)