# Computing the Moore-Penrose pseudoinverse of a submatrix

Given a rank-$n$ $m\times n$ real matrix $\boldsymbol{A}$ with singular value decomposition $$\boldsymbol{A} = \boldsymbol{U}\boldsymbol{\Sigma} \boldsymbol{V}^T$$ and an $m \times k$ matrix $\boldsymbol{C}$ whose columns are a subset of the columns of $\boldsymbol{A}$, is there a way to obtain the Moore-Penrose generalized inverse of $\boldsymbol{C}$ efficiently, taking advantage of the fact that I have already computed the SVD of $\boldsymbol{A}$?

Note that if the SVD of $\boldsymbol{C}$ is $$\boldsymbol{C} = \boldsymbol{U}'\boldsymbol{\Sigma}' (\boldsymbol{V}')^T$$ then the Moore-Penrose generalized inverse of $\boldsymbol{C}$ is $$\boldsymbol{C}^+ = \boldsymbol{V}'(\boldsymbol{\Sigma}')^{-1}(\boldsymbol{U}')^T$$

The inputs are a full column rank matrix $\mathbf{A}^{m\times n}_{n}$ and its singular value decomposition: \begin{align} \mathbf{A} &= \mathbf{U} \, \Sigma \, \mathbf{V}^{*} \\ % &= % U \left[ \begin{array}{cc} \color{blue}{\mathbf{U}_{\mathcal{R}}} & \color{red}{\mathbf{U}_{\mathcal{N}}} \end{array} \right] % Sigma \left[ \begin{array}{c} \mathbf{S}_{n\times n} \\ \mathbf{0} \end{array} \right] % V \left[ \begin{array}{c} \color{blue}{\mathbf{V}_{\mathcal{R}}}^{*} \end{array} \right] \\ % \end{align} Colors distinguish $\color{blue}{range}$ spaces from $\color{red}{null}$ spaces.
Think of the input matrix as being column-partitioned like so $$\mathbf{A} = \left[ \begin{array}{c|c} \mathbf{A}_{1} & \mathbf{A}_{2} \end{array} \right]$$
The question is that if we are given $\mathbf{A}$ and its singular value decomposition, can we use that to construct the singular value decomposition of $\mathbf{A}_{1}$?
The obvious special case is when we miraculously grab all the linearly independent columns in the range space $\color{blue}{\mathcal{R}\left( \mathbf{A} \right)}$: $$\mathbf{A} = \left[ \begin{array}{c|c} \mathbf{A}_{1} & \mathbf{A}_{2} \end{array} \right] % = % \left[ \begin{array}{c|c} \color{blue}{\mathbf{U}_{\mathcal{R}}} & \color{red}{\mathbf{U}_{\mathcal{N}}} \end{array} \right]$$ In this case, we can construct the SVD and pseudoinverse from existing components. \begin{align} % \mathbf{A}_{1} &= \color{blue}{\mathbf{U}_{\mathcal{R}}} \, \mathbf{S} \, \color{blue}{\mathbf{V}^{*}_{\mathcal{R}}}, \\ % \mathbf{A}_{1}^{+} &= \color{blue}{\mathbf{V}_{\mathcal{R}}} \, \mathbf{S}^{-1} \, \color{blue}{\mathbf{U}^{*}_{\mathcal{R}}}. \\ % \end{align}