code: def hist_3d_index(x, y, z, shape):
      
      if len(shape) != 3:
          raise InvalidInputError('The shape has to describe a 3-d histogram')
      # change memory alignment for c++ library
      x = np.ascontiguousarray(x.astype(np.int32))
      y = np.ascontiguousarray(y.astype(np.int32))
      z = np.ascontiguousarray(z.astype(np.int32))
      result = np.zeros(shape=shape, dtype=np.uint32).ravel()  # ravel hist in c-style, 3D --> 1D
      analysis_functions.hist_3d(x, y, z, shape[0], shape[1], shape[2], result)
      return np.reshape(result, shape)
docs: Fast 3d histogram of 3D indices with C++ inner loop optimization.
      Is more than 2 orders faster than np.histogramdd().
      The indices are given in x, y, z coordinates and have to fit into a histogram of the dimensions shape.
      Parameters
      ----------
      x : array like
      y : array like
      z : array like
      shape : tuple
          tuple with x,y,z dimensions: (x, y, z)
  
      Returns
      -------
      np.ndarray with given shape