def splitDataAboveBelowMean(self, npIn, sensorsIn, returnType, n_tests = -1): above = [] below = [] restSensors = [] extSensors = [] mean = 0 if returnType == 'm': mean = np.mean(npIn) above = npIn[npIn > mean] below = npIn[npIn < mean] else: #it's for points mean = Point.averagePoints(npIn).sqrMagnitude() for i, p in enumerate(npIn): if p.sqrMagnitude() > mean: above.append(p) extSensors.append(sensorsIn[i]) else: below.append(p) restSensors.append(sensorsIn[i]) # above = [p for p in npIn if p.sqrMagnitude() > mean] # below = [p for p in npIn if p.sqrMagnitude() < mean] if n_tests >= 1: print("n_tests is used!") above, below, restSensors, extSensors = above[:n_tests], below[:n_tests], restSensors[:n_tests], extSensors[:n_tests] return np.array(above), np.array(below), Point.averagePoints(np.append(above,below)), np.array(extSensors), np.array(restSensors)
def generateFeatures(self, byValue, threshold): # Returns numpy arrays where possible self.plateaus = self.lookAheadForPlateau(by = byValue, varianceThreshold = threshold) self.plateauPoints = self.averagePlateauSections(self.plateaus, 'p') self.plateauSensorValues = self.extractData6Values(self.plateaus) self.plateauSensorAverages = self.avgSensorValues(self.plateauSensorValues) self.extensionPoints, self.restPoints, self.meanPoint, self.extensionSensors, self.restSensors = self.splitDataAboveBelowMean(self.plateauPoints, self.plateauSensorAverages, returnType = 'p') self.meanRestPoint = Point.averagePoints(self.restPoints) self.trimLists() self.vectorsBetween = [self.extensionPoints[i] - self.restPoints[i] for i, val in enumerate(self.restPoints)] self.anglesBetween = [Point.angleBetween(self.extensionPoints[i] ,self.restPoints[i] ) for i, val in enumerate(self.restPoints)]
def averagePlateauSections(self, plateaus, returnType = 'm'): ''' array to hold each flat part of the palteaus return array loop through through plateaus array if i is 0, then we save the mean of avgFlat, then clear avgFlat and move on else we save the length of the point to avgFlat then average any flat parts and append to return array return array ''' avgFlat, returnArray = [],[] for i, num in enumerate(plateaus): if num == 0: if len(avgFlat) != 0: #we've reached the end of a plateau if returnType == 'm': returnArray.append(np.mean(avgFlat)) else: returnArray.append(Point.averagePoints(avgFlat)) avgFlat.clear() continue if returnType == 'm': avgFlat.append(self.copPoints[i].magnitude()) else: avgFlat.append(self.copPoints[i]) # Consider the code reaching the end of the list with items not yet averaged if len(avgFlat) != 0: if returnType == 'm': returnArray.append(np.mean(avgFlat)) else: returnArray.append(Point.averagePoints(avgFlat)) return np.array(returnArray)