Skip to main content
`Ctrl`+`K`
scipy.linalg.

# pinvh

scipy.linalg.pinvh(a, atol=None, rtol=None, lower=True, return_rank=False, check_finite=True)

  Compute the (Moore-Penrose) pseudo-inverse of a Hermitian matrix.

  Calculate a generalized inverse of a complex Hermitian/real symmetric matrix using its eigenvalue decomposition and including all eigenvalues with ‘large’ absolute value.

  Parameters:
    a(N, N) array_like

      Real symmetric or complex hermetian matrix to be pseudo-inverted

    atol float, optional

      Absolute threshold term, default value is 0.

      Added in version 1.7.0.

    rtol float, optional

      Relative threshold term, default value is `N * eps` where `eps` is the machine precision value of the datatype of `a`.

      Added in version 1.7.0.

    lower bool, optional

      Whether the pertinent array data is taken from the lower or upper triangle of a. (Default: lower)

    return_rank bool, optional

      If True, return the effective rank of the matrix.

    check_finite bool, optional

      Whether to check that the input matrix contains only finite numbers. Disabling may give a performance gain, but may result in problems (crashes, non-termination) if the inputs do contain infinities or NaNs.

  Returns:
    B(N, N) ndarray

      The pseudo-inverse of matrix a.

    rank int

      The effective rank of the matrix. Returned if return_rank is True.

  Raises:
    LinAlgError

      If eigenvalue algorithm does not converge.

  See also

  `pinv`

    Moore-Penrose pseudoinverse of a matrix.

  Examples

  For a more detailed example see `pinv`.

      >>> import numpy as np
      >>> from scipy.linalg import pinvh
      >>> rng = np.random.default_rng()
      >>> a = rng.standard_normal((9, 6))
      >>> a = np.dot(a, a.T)
      >>> B = pinvh(a)
      >>> np.allclose(a, a @ B @ a)
      True
      >>> np.allclose(B, B @ a @ B)
      True