docs: def fingerprint_correlation(P, obs1, obs2=None, tau=1, k=None, ncv=None):
      r"""Compute dynamical fingerprint crosscorrelation.
  
      The dynamical fingerprint autocorrelation is the timescale
      amplitude spectrum of the autocorrelation of the given observables
      under the action of the dynamics P
  
      Parameters
      ----------
      P : ndarray, shape=(n, n) or scipy.sparse matrix
          Transition matrix
      obs1 : ndarray, shape=(n,)
          Vector representing observable 1 on discrete states
      obs2 : ndarray, shape=(n,)
          Vector representing observable 2 on discrete states.
          If none, obs2=obs1, i.e. the autocorrelation is used
      tau : lag time of the the transition matrix. Used for
          computing the timescales returned
      k : int (optional)
          Number of amplitudes
      ncv : int (optional)
          The number of Lanczos vectors generated, `ncv` must be greater than k;
          it is recommended that ncv > 2*k
  
  
      Returns
      -------
      timescales : (N,) ndarray
          Time-scales of the transition matrix
      amplitudes : (N,) ndarray
          Amplitudes for the correlation experiment
  
      """
      return fingerprint(P, obs1, obs2=obs2, tau=tau, k=k, ncv=ncv)