コード例 #1
0
ファイル: histogram.py プロジェクト: zshwuhan/streamhist
    def quantiles(self, *quantiles):
        """Return the estimated data value for the given quantile(s).

        The requested quantile(s) must be between 0 and 1. Note that even if a
        single quantile is input, a list is always returned.
        """
        temp = bin_sums(self.bins)
        sums = list(accumulate(temp))
        result = []
        for x in quantiles:
            target_sum = x * self.total
            if x <= 0:
                qq = self._min
            elif x >= self.total:
                qq = self._max
            else:
                index = bisect_left(sums, target_sum)
                bin_i = self.bins[index]
                if index < len(sums):
                    bin_i1 = self.bins[index+1]
                else:
                    bin_i1 = self.bins[index]
                if index:
                    prev_sum = sums[index-1]
                else:
                    prev_sum = 0.0
                qq = _compute_quantile(target_sum, bin_i, bin_i1, prev_sum+1)
            result.append(qq)
        return result
コード例 #2
0
ファイル: histogram.py プロジェクト: jusic/streamhist
    def quantiles(self, *quantiles):
        """Return the estimated data value for the given quantile(s).

        The requested quantile(s) must be between 0 and 1. Note that even if a
        single quantile is input, a list is always returned.
        """
        temp = bin_sums(self.bins)
        sums = list(accumulate(temp))
        result = []
        for x in quantiles:
            target_sum = x * self.total
            if x <= 0:
                qq = self._min
            elif x >= self.total:
                qq = self._max
            else:
                index = bisect_left(sums, target_sum)
                bin_i = self.bins[index]
                if index < len(sums):
                    bin_i1 = self.bins[index + 1]
                else:
                    bin_i1 = self.bins[index]
                if index:
                    prev_sum = sums[index - 1]
                else:
                    prev_sum = 0.0
                qq = _compute_quantile(target_sum, bin_i, bin_i1, prev_sum + 1)
            result.append(qq)
        return result
コード例 #3
0
ファイル: histogram.py プロジェクト: zshwuhan/streamhist
 def sum(self, x):
     """Return the estimated number of points in the interval [−∞, b]."""
     x = float(x)
     if x < self._min:
         ss = 0.0  # Sum is zero!
     elif x >= self._max:
         ss = float(self.total)
     elif x == self.bins[-1].value:
         # Shortcut for when i == max bin (see Steps 3-6)
         last = self.bins[-1]
         ss = float(self.total) - (float(last.count) / 2.0)
     # elif x <= self.bins[0].value:
     #     # Shortcut for when i == min bin (see Steps 3-6)
     #     first = self.bins[0]
     #     ss = float(first.count) / 2.0
     else:
         bin_i = self.floor(x)
         if bin_i is None:
             bin_i = Bin(value=self._min, count=0)
         bin_i1 = self.higher(x)
         if bin_i1 is None:
             bin_i1 = Bin(value=self._max, count=0)
         if bin_i.value == self._min:
             prev_sum = self.bins[0].count / 2.0
         else:
             temp = bin_sums(self.bins, less=x)
             if len(temp):
                 prev_sum = sum(temp)
             else:
                 prev_sum = 0.0
         ss = _compute_sum(x, bin_i, bin_i1, prev_sum)
     return ss
コード例 #4
0
ファイル: histogram.py プロジェクト: jusic/streamhist
 def sum(self, x):
     """Return the estimated number of points in the interval [−∞, b]."""
     x = float(x)
     if x < self._min:
         ss = 0.0  # Sum is zero!
     elif x >= self._max:
         ss = float(self.total)
     elif x == self.bins[-1].value:
         # Shortcut for when i == max bin (see Steps 3-6)
         last = self.bins[-1]
         ss = float(self.total) - (float(last.count) / 2.0)
     # elif x <= self.bins[0].value:
     #     # Shortcut for when i == min bin (see Steps 3-6)
     #     first = self.bins[0]
     #     ss = float(first.count) / 2.0
     else:
         bin_i = self.floor(x)
         if bin_i is None:
             bin_i = Bin(value=self._min, count=0)
         bin_i1 = self.higher(x)
         if bin_i1 is None:
             bin_i1 = Bin(value=self._max, count=0)
         if bin_i.value == self._min:
             prev_sum = self.bins[0].count / 2.0
         else:
             temp = bin_sums(self.bins, less=x)
             if len(temp):
                 prev_sum = sum(temp)
             else:
                 prev_sum = 0.0
         ss = _compute_sum(x, bin_i, bin_i1, prev_sum)
     return ss