docs: def compute_stats2(arrayNR, stats, weights):
      """
      :param arrayNR:
          an array of (N, R) elements
      :param stats:
          a sequence of S statistic functions
      :param weights:
          a list of R weights
      :returns:
          an array of (N, S) elements
      """
      newshape = list(arrayNR.shape)
      if newshape[1] != len(weights):
          raise ValueError('Got %d weights but %d values!' %
                           (len(weights), newshape[1]))
      newshape[1] = len(stats)  # number of statistical outputs
      newarray = numpy.zeros(newshape, arrayNR.dtype)
      data = [arrayNR[:, i] for i in range(len(weights))]
      for i, func in enumerate(stats):
          newarray[:, i] = apply_stat(func, data, weights)
      return newarray