Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. import numpy as np
  2. from ast import literal_eval
  3. import getopt
  4. import json
  5. import sys
  6.  
  7.  
  8. def main(argv):
  9. usage = 'usage: remove_outlier.py -x <xvals> -y <yvals> -z <zvals>'
  10. x = []
  11. y = []
  12. z = []
  13.  
  14. try:
  15. opts, args = getopt.getopt(argv, "srdhu:x:y:z:", ["help"])
  16. except getopt.GetoptError as err:
  17. print(str(err))
  18. print(usage)
  19. sys.exit(2)
  20.  
  21. for opt, arg in opts:
  22. if opt in ("-h", "--help"):
  23. print(usage)
  24. sys.exit()
  25. elif opt == '-x':
  26. x = parse_array(arg)
  27. elif opt == '-y':
  28. y = parse_array(arg)
  29. elif opt == '-z':
  30. z = parse_array(arg)
  31.  
  32.  
  33. if None in (x, y, z):
  34. print('Error: Missing values')
  35. sys.exit(2)
  36.  
  37. (inliers_x, inliers_y, inliers_z) = remove_outliers(x, y, z)
  38.  
  39. print(inliers_x)
  40. print(inliers_y)
  41. print(inliers_z)
  42.  
  43. #print(json.dumps({'x' : str(inliers_x), 'y' : str(inliers_y), 'z' : str(inliers_z)}))
  44.  
  45. def parse_array(arg):
  46. return [float(n) for n in literal_eval(arg)]
  47.  
  48. def remove_outliers(x,y,z):
  49. avg_x = np.mean(x)
  50. avg_y = np.mean(y)
  51. avg_z = np.mean(z)
  52.  
  53. std_x = np.std(x)
  54. std_y = np.std(y)
  55. std_z = np.std(z)
  56.  
  57. outlier_indices = []
  58.  
  59. for i in range(0, len(x)):
  60. if(x[i] > avg_x + 1.7 * std_x or x[i] < avg_x - 1.7 * std_x):
  61. outlier_indices.append(i)
  62. elif(y[i] > avg_y + 1.7 * std_y or y[i] < avg_y - 1.7 * std_y):
  63. outlier_indices.append(i)
  64. elif(z[i] > avg_z + 1.7 * std_z or z[i] < avg_z - 1.7 * std_z):
  65. outlier_indices.append(i)
  66.  
  67. inliers_x = [x[i] for i in range(0, len(x)) if i not in outlier_indices]
  68. inliers_y = [y[i] for i in range(0, len(y)) if i not in outlier_indices]
  69. inliers_z = [z[i] for i in range(0, len(z)) if i not in outlier_indices]
  70.  
  71. return (inliers_x, inliers_y, inliers_z)
  72.  
  73. def get_average(x, y, z):
  74. return (np.mean(x), np.mean(y), np.mean(z))
  75.  
  76. if __name__ == "__main__":
  77. main(sys.argv[1:])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement