La pseudoinversa de Moore-Penrose
A⁺ está definida para toda matriz — cuadrada o no, singular o no — y se calcula a partir de la SVD:
A = np.random.randn(5, 3)
A_plus = np.linalg.pinv(A)
print(A.shape, A_plus.shape) # (5, 3) (3, 5) — la forma se invierte
U, S_, Vt = np.linalg.svd(A, full_matrices=False)
np.allclose(A_plus, Vt.T @ np.diag(1/S_) @ U.T) # True
Fíjate en la inversión de la forma: la pseudoinversa de una matriz alta es ancha.