def tolerance_limit_processing(intervals):
"""Tolerance limit processing"""
left = [x[0] for x in intervals]
right = [x[1] for x in intervals]
mean_left = np.mean(left)
std_left = np.std(left, ddof=1)
mean_right = np.mean(right)
std_right = np.std(right, ddof=1)
limits = [32.019, 32.019, 8.380, 5.369, 4.275, 3.712, 3.369, 3.136, 2.967, 2.839,
2.737, 2.655, 2.587, 2.529, 2.48, 2.437, 2.4, 2.366, 2.337, 2.31, 2.31, 2.31,
2.31, 2.31, 2.208]
k = limits[min(len(left) - 1, 24)]
# Tolerance limit processing for Left and Right bounds
left_filtered = [x for x in intervals if (mean_left - k * std_left) <= x[0] <= (mean_left + k * std_left)]
right_filtered = [x for x in left_filtered if (mean_right - k * std_right) <= x[1] <= (mean_right + k * std_right)]
# Tolerance limit processing for interval length
len_values = [x[1] - x[0] for x in right_filtered]
mean_len = np.mean(len_values)
std_len = np.std(len_values, ddof=1)
if std_len != 0:
k = min(k, mean_len / std_len, (100 - mean_len) / std_len)
len_filtered = [x if (mean_len - k * std_len) <= x <= (mean_len + k * std_len) else None for x in len_values]
selectors = [x is not None for x in len_filtered]
filtered_intervals = list(itertools.compress(right_filtered, selectors))
return filtered_intervals
评论列表
文章目录