code: def _radial_profile(autocorr, r_max, nbins=100):
      r
      if len(autocorr.shape) == 2:
          adj = sp.reshape(autocorr.shape, [2, 1, 1])
          inds = sp.indices(autocorr.shape) - adj/2
          dt = sp.sqrt(inds[0]**2 + inds[1]**2)
      elif len(autocorr.shape) == 3:
          adj = sp.reshape(autocorr.shape, [3, 1, 1, 1])
          inds = sp.indices(autocorr.shape) - adj/2
          dt = sp.sqrt(inds[0]**2 + inds[1]**2 + inds[2]**2)
      else:
          raise Exception('Image dimensions must be 2 or 3')
      bin_size = np.int(np.ceil(r_max/nbins))
      bins = np.arange(bin_size, r_max, step=bin_size)
      radial_sum = np.zeros_like(bins)
      for i, r in enumerate(bins):
          # Generate Radial Mask from dt using bins
          mask = (dt <= r) * (dt > (r-bin_size))
          radial_sum[i] = np.sum(autocorr[mask])/np.sum(mask)
      # Return normalized bin and radially summed autoc
      norm_autoc_radial = radial_sum/np.max(autocorr)
      tpcf = namedtuple('two_point_correlation_function',
                        ('distance', 'probability'))
      return tpcf(bins, norm_autoc_radial)
docs: r"""
      Helper functions to calculate the radial profile of the autocorrelation
      Masks the image in radial segments from the center and averages the values
      The distance values are normalized and 100 bins are used as default.
  
      Parameters
      ----------
      autocorr : ND-array
          The image of autocorrelation produced by FFT
      r_max : int or float
          The maximum radius in pixels to sum the image over
  
      Returns
      -------
      result : named_tuple
          A named tupling containing an array of ``bins`` of radial position
          and an array of ``counts`` in each bin.