code: def reduce(self, dimensions=None, function=None, **reduce_map):
          
          function, dims = self._reduce_map(dimensions, function, reduce_map)
          if len(dims) == self.ndims:
              if isinstance(function, np.ufunc):
                  return function.reduce(self.data, axis=None)
              else:
                  return function(self.data)
          else:
              dimension = dims[0]
              other_dimension = [d for d in self.kdims if d.name != dimension]
              oidx = self.get_dimension_index(other_dimension[0])
              x_vals = self.dimension_values(other_dimension[0].name, False)
              reduced = function(self._zdata, axis=oidx)
              if oidx and hasattr(self, 'bounds'):
                  reduced = reduced[::-1]
              data = zip(x_vals, reduced)
              params = dict(dict(self.get_param_values(onlychanged=True)),
                            kdims=other_dimension, vdims=self.vdims)
              params.pop('bounds', None)
              params.pop('extents', None)
              return Table(data, **params)
docs: Reduces the Raster using functions provided via the
          kwargs, where the keyword is the dimension to be reduced.
          Optionally a label_prefix can be provided to prepend to
          the result Element label.