docs: def _ncc_c_3dim(x, y):
      """
      Variant of NCCc that operates with 2 dimensional X arrays and 2 dimensional
      y vector
  
      Returns a 3 dimensional array of normalized fourier transforms
      """
      den = norm(x, axis=1)[:, None] * norm(y, axis=1)
      den[den == 0] = np.Inf
      x_len = x.shape[-1]
      fft_size = 1 << (2*x_len-1).bit_length()
      cc = ifft(fft(x, fft_size) * np.conj(fft(y, fft_size))[:, None])
      cc = np.concatenate((cc[:,:,-(x_len-1):], cc[:,:,:x_len]), axis=2)
      return np.real(cc) / den.T[:, :, None]