def search_signatures(indexname, level_filenames, feature_filenames): import correlate import smooth_avg level_signatures = [] for level_filename, feature_filename in zip(level_filenames, feature_filenames): level_signature = signature_read.read_signature_short(level_filename) level_signatures.append(level_signature) data = pickle.loads(open(indexname, "r").read()) search_results = [] for level_filename, feature_filename in zip(level_filenames, feature_filenames): level_signature = signature_read.read_signature_short(level_filename) feature_signature = signature_read.read_signature_byte( feature_filename) signature = signature_make.signature_make(level_signature, feature_signature) search_result = signature_make.signature_search_intersect( data, signature) search_result = [ (i, compare, correlate.pearson(smooth_avg.avg_smooth(level_signature), smooth_avg.avg_smooth(level_signatures[i]))) for i, compare in search_result ] # search_result = [(i, compare) for i, compare in search_result] search_results.append(search_result) return search_results
def signature_make(level_signature, feature_signature): result = [] level_range = 2**16 feature_range = 2**8 import smooth_avg level_signature = smooth_avg.avg_smooth(level_signature) for (last_level, last_feature), (level, feature) in adjacent(zip(level_signature, feature_signature)): if abs(level - last_level) > level_range / 8: feature_value = last_feature * feature_range + feature result.append(feature_value) return result
def signature_make(level_signature, feature_signature): result = [] level_range = 2**16 feature_range = 2**8 import smooth_avg level_signature = smooth_avg.avg_smooth(level_signature) for (last_level, last_feature), (level, feature) in adjacent( zip(level_signature, feature_signature)): if abs(level - last_level) > level_range / 8: feature_value = last_feature * feature_range + feature result.append(feature_value) return result
def window_normalize(values, window = 200): import smooth_avg values = smooth_avg.avg_smooth(values) forward_avg, backward_avg = [], [] queue = deque(maxlen = window / 2) for value in values: forward_avg.append((sum(queue), len(queue))) queue.append(value) queue = deque(maxlen = window / 2) for value in reversed(values): backward_avg.append((sum(queue), len(queue))) queue.append(value) avg = [float(fs + value + bs) / float(fl + 1 + bl) for value, (fs, fl), (bs, bl) in zip(values, forward_avg, backward_avg)] return [value / average if average else 0 for value, average in zip(values, avg)]
def search_signatures(indexname, level_filenames, feature_filenames): import correlate import smooth_avg level_signatures = [] for level_filename, feature_filename in zip(level_filenames, feature_filenames): level_signature = signature_read.read_signature_short(level_filename) level_signatures.append(level_signature) data = pickle.loads(open(indexname, "r").read()) search_results = [] for level_filename, feature_filename in zip(level_filenames, feature_filenames): level_signature = signature_read.read_signature_short(level_filename) feature_signature = signature_read.read_signature_byte(feature_filename) signature = signature_make.signature_make(level_signature, feature_signature) search_result = signature_make.signature_search_intersect(data, signature) search_result = [(i, compare, correlate.pearson(smooth_avg.avg_smooth(level_signature), smooth_avg.avg_smooth(level_signatures[i]))) for i, compare in search_result] # search_result = [(i, compare) for i, compare in search_result] search_results.append(search_result) return search_results
def slide_normalize(values): import smooth_avg values = smooth_avg.avg_smooth(values) values = [value + 2**15 for value in values] forward_avg = [] backward_avg = [] alpha = 0.5 average = 0.0 for value in values: average = average * alpha + value * (1 - alpha) forward_avg.append(average) average = 0.0 for value in reversed(values): average = average * alpha + value * (1 - alpha) backward_avg.append(average) backward_avg.reverse() bi_avg = [(forward + backward) / 2 for forward, backward in zip(forward_avg, backward_avg)] result = [] for value, average in zip(values, forward_avg): if value and average: result_value = value / average else: result_value = 0 result.append(result_value) return result[int(len(result) * 0.1):-int(len(result) * 0.1)]