Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from ast import literal_eval
- import getopt
- import json
- import sys
- def main(argv):
- usage = 'usage: remove_outlier.py -x <xvals> -y <yvals> -z <zvals>'
- x = []
- y = []
- z = []
- try:
- opts, args = getopt.getopt(argv, "srdhu:x:y:z:", ["help"])
- except getopt.GetoptError as err:
- print(str(err))
- print(usage)
- sys.exit(2)
- for opt, arg in opts:
- if opt in ("-h", "--help"):
- print(usage)
- sys.exit()
- elif opt == '-x':
- x = parse_array(arg)
- elif opt == '-y':
- y = parse_array(arg)
- elif opt == '-z':
- z = parse_array(arg)
- if None in (x, y, z):
- print('Error: Missing values')
- sys.exit(2)
- (inliers_x, inliers_y, inliers_z) = remove_outliers(x, y, z)
- print(inliers_x)
- print(inliers_y)
- print(inliers_z)
- #print(json.dumps({'x' : str(inliers_x), 'y' : str(inliers_y), 'z' : str(inliers_z)}))
- def parse_array(arg):
- return [float(n) for n in literal_eval(arg)]
- def remove_outliers(x,y,z):
- avg_x = np.mean(x)
- avg_y = np.mean(y)
- avg_z = np.mean(z)
- std_x = np.std(x)
- std_y = np.std(y)
- std_z = np.std(z)
- outlier_indices = []
- for i in range(0, len(x)):
- if(x[i] > avg_x + 1.7 * std_x or x[i] < avg_x - 1.7 * std_x):
- outlier_indices.append(i)
- elif(y[i] > avg_y + 1.7 * std_y or y[i] < avg_y - 1.7 * std_y):
- outlier_indices.append(i)
- elif(z[i] > avg_z + 1.7 * std_z or z[i] < avg_z - 1.7 * std_z):
- outlier_indices.append(i)
- inliers_x = [x[i] for i in range(0, len(x)) if i not in outlier_indices]
- inliers_y = [y[i] for i in range(0, len(y)) if i not in outlier_indices]
- inliers_z = [z[i] for i in range(0, len(z)) if i not in outlier_indices]
- return (inliers_x, inliers_y, inliers_z)
- def get_average(x, y, z):
- return (np.mean(x), np.mean(y), np.mean(z))
- if __name__ == "__main__":
- main(sys.argv[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement