diff --git a/skais/process/basic_features_operations.py b/skais/process/basic_features_operations.py index c4c7d3bbbefe115b87696c4f02f4be8cb0ba532e..350ae1751f8dde15978f6d440c1c96a22d39c262 100644 --- a/skais/process/basic_features_operations.py +++ b/skais/process/basic_features_operations.py @@ -18,16 +18,14 @@ def angular_dispersion(angles): def angular_mean(angles): x, y = angular_average_vector(angles) - theta = abs(np.arctan2(x, y)) + theta = np.arctan(y/x) - if y > 0 and x > 0: # first Q + if y > 0 and x > 0: return theta - if y > 0 >= x: # Second Q - return np.pi / 2 + theta - if y <= 0 < x: # Fourth Q - return np.pi / 2 - theta - else: # Third Q - return - theta + elif x <= 0: + return np.pi + theta + else: + return 2*np.pi + theta def angular_std(angles): diff --git a/skais/tests/process/test_basic_features_operations.py b/skais/tests/process/test_basic_features_operations.py index da2f62eb6388adf5c8f8036c2b67610aeb0a3626..029583b0ef639888f49dbb58ce611786668746f0 100644 --- a/skais/tests/process/test_basic_features_operations.py +++ b/skais/tests/process/test_basic_features_operations.py @@ -9,7 +9,7 @@ class TestAngular(unittest.TestCase): def test_angular_mean_simple(self): x = np.radians(np.array([1, 359])) - self.assertEqual(0.0, angular_mean(x)) + self.assertEqual(2*np.pi, angular_mean(x)) def test_angular_mean_simple_2(self): x = np.radians(np.array([180, 180, 180, 180, 179, 181])) @@ -19,7 +19,7 @@ class TestAngular(unittest.TestCase): def test_angular_mean_simple_3(self): x = np.radians(np.array([0, 0, 0, 0, 359, 1])) - self.assertEqual(0.0, angular_mean(x)) + self.assertEqual(2*np.pi, angular_mean(x)) def test_angular_mean_first_quadrant(self): x = np.radians(np.array([43, 44, 45, 46, 47])) @@ -34,12 +34,12 @@ class TestAngular(unittest.TestCase): def test_angular_mean_third_quadrant(self): x = np.radians(np.array([223, 224, 225, 226, 227])) - self.assertEqual(-3 * np.pi / 4, angular_mean(x)) + self.assertEqual(5 * np.pi / 4, angular_mean(x)) def test_angular_mean_fourth_quadrant(self): x = np.radians(np.array([313, 314, 315, 316, 317])) - self.assertEqual(-np.pi / 4, angular_mean(x)) + self.assertEqual(7*np.pi / 4, angular_mean(x)) def test_angular_std(self): x = np.radians(np.array([0, 0, 0, 0]))