Skip to main content
`Ctrl`+`K`

# MatCreateCentering

Creates a new matrix object that implements the (symmetric and idempotent) centering matrix, \( I - (1/N) * 1^T * 1\)

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

Matrices, `Mat`, `MatCreateLRC()`, `MatCreateComposite()`

## Level

intermediate

## Location

src/mat/impls/centering/centering.c

Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages