def getBigramMaxesAndMins(bigrams): def ni(x): return x[x != float("-Inf")] maxes = Object() maxes.fullLength = np.max([np.max(ni(b.fullLength)) for b in bigrams]) maxes.gap = np.max([np.max(ni(b.gap)) for b in bigrams]) maxes.startStart = np.max([np.max(ni(b.startStart)) for b in bigrams]) mins = Object() mins.fullLength = np.min([np.min(ni(b.fullLength)) for b in bigrams]) mins.gap = np.min([np.min(ni(b.gap)) for b in bigrams]) mins.startStart = np.min([np.min(ni(b.startStart)) for b in bigrams]) return (maxes, mins)
def compileBigramModel(data): COUNT_CUTOFF = 5 TIME_CUTOFF = 5 bigramModel = data.bigramModel keycodes = sorted(list(KEYCODES.values())) keyToIndex = dict((v, k) for (k, v) in enumerate(keycodes)) fullLength = np.zeros([len(keycodes)] * 2) + float("-Inf") gap = np.zeros([len(keycodes)] * 2) + float("-Inf") startStart = np.zeros([len(keycodes)] * 2) + float("-Inf") for (k, v) in bigramModel.iteritems(): for (m, n) in v.iteritems(): (fl, g, ss) = zip(*n) if len(fl) >= COUNT_CUTOFF and abs(np.mean(fl)) < TIME_CUTOFF: fullLength[keyToIndex[k], keyToIndex[m]] = np.mean(fl) if len(g) >= COUNT_CUTOFF and abs(np.mean(g)) < TIME_CUTOFF: gap[keyToIndex[k], keyToIndex[m]] = np.mean(g) if len(ss) >= COUNT_CUTOFF and abs(np.mean(ss)) < TIME_CUTOFF: startStart[keyToIndex[k], keyToIndex[m]] = np.mean(ss) bigram = Object() bigram.fullLength = fullLength bigram.gap = gap bigram.startStart = startStart return bigram