@@ -102,24 +102,17 @@ def range_limit_table(self, minval, maxval, range_, bins, datasize, data):
102102 if bins > max_bins :
103103 bins = max_bins
104104
105- self .rangeLimitTable = [0 ] * bins
106- self .numberEqualOrExceedingRangeLimit = [0 ] * bins
107-
105+ self .rangeLimitTable = np .empty (bins , dtype = float )
108106 self .rangeLimitTable [0 ] = NULL_INT
109107 self .rangeLimitTable [1 ] = minval
110108
111109 step = range_ / bins
112-
113- for i in range (2 , bins ):
114- self .rangeLimitTable [i ] = minval + step * i
110+ self .rangeLimitTable [2 :] = minval + step * np .arange (2 , bins )
115111
116112 self .rangeLimitTable [bins - 1 ] = maxval
117113 # Exceedance
118- sorted_data = np .sort (data )
119- n = len (sorted_data )
120- for jdx in range (bins ):
121- idx = np .searchsorted (sorted_data , self .rangeLimitTable [jdx ], side = "left" )
122- self .numberEqualOrExceedingRangeLimit [jdx ] = n - idx
114+ mask = data [None , :] >= self .rangeLimitTable [:, None ]
115+ self .numberEqualOrExceedingRangeLimit = mask .sum (axis = 1 )
123116
124117 def update_grid_info (self ):
125118 """
@@ -134,8 +127,8 @@ def update_grid_info(self):
134127 self .meanDataValue = np .nanmean (self .data )
135128
136129 self .data = np .nan_to_num (self .data , nan = NULL_INT )
137- self .numberOfRanges = math .floor (1 + 3.322 * math .log10 (n ) + 1 )
138- flat_data = self .data .ravel ()
130+ self .numberOfRanges = math .floor (2 + 3.322 * math .log10 (n ))
131+ flat_data = self .data .flatten ()
139132 self .range_limit_table (self .minDataValue , self .maxDataValue , bin_range , self .numberOfRanges , n , flat_data )
140133
141134 @staticmethod
0 commit comments