code: def centroid_com(data, mask=None):
      
  
      data = data.astype(np.float)
  
      if mask is not None and mask is not np.ma.nomask:
          mask = np.asarray(mask, dtype=bool)
          if data.shape != mask.shape:
              raise ValueError('data and mask must have the same shape.')
          data[mask] = 0.
  
      badidx = ~np.isfinite(data)
      if np.any(badidx):
          warnings.warn('Input data contains input values (e.g. NaNs or infs), '
                        'which were automatically masked.', AstropyUserWarning)
          data[badidx] = 0.
  
      total = np.sum(data)
      indices = np.ogrid[[slice(0, i) for i in data.shape]]
  
      # note the output array is reversed to give (x, y) order
      return np.array([np.sum(indices[axis] * data) / total
                       for axis in range(data.ndim)])[::-1]
docs: Calculate the centroid of an n-dimensional array as its "center of
      mass" determined from moments.
  
      Invalid values (e.g. NaNs or infs) in the ``data`` array are
      automatically masked.
  
      Parameters
      ----------
      data : array_like
          The input n-dimensional array.
  
      mask : array_like (bool), optional
          A boolean mask, with the same shape as ``data``, where a `True`
          value indicates the corresponding element of ``data`` is masked.
  
      Returns
      -------
      centroid : `~numpy.ndarray`
          The coordinates of the centroid in pixel order (e.g. ``(x, y)``
          or ``(x, y, z)``), not numpy axis order.