fn pseudo_inv(&self) -> Self {
        match () {
            #[cfg(feature = "O3")]
            () => {
                let svd = self.svd();
                let row = svd.vt.row;
                let col = svd.u.row;
                let mut sp = zeros(row, col);
                for i in 0..row.min(col) {
                    sp[(i, i)] = 1f64 / svd.s[i];
                }
                svd.vt.t() * sp * svd.u.t()
            }
            _ => {
                let xt = self.t();
                let xtx = &xt * self;
                xtx.inv() * xt
            }
        }
    }
Moore-Penrose Pseudo inverse

# Description
`$X^\dagger = (X^T X)^{-1} X^T$`

# Examples
```
#[macro_use]
extern crate peroxide;
use peroxide::fuga::*;

fn main() {
let a = matrix!(1;4;1, 2, 2, Row);
let inv_a = a.inv();
let pse_a = a.pseudo_inv();

assert_eq!(inv_a, pse_a); // Nearly equal
}
```
src/structure/matrix.rs