Skip to content
Snippets Groups Projects
Commit d15e98c3 authored by David Verelst's avatar David Verelst
Browse files

Merge branch 'master' of gitlab.windenergy.dtu.dk:toolbox/WindEnergyToolbox

parents e25bf01a 8b13f0ce
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -29,13 +29,33 @@ def mean_deg(dir, axis=0): ...@@ -29,13 +29,33 @@ def mean_deg(dir, axis=0):
---------- ----------
dir : array_like dir : array_like
Angles in degrees Angles in degrees
axis : int
if dir is 2d array_like, axis defines which axis to take the mean of
Returns Returns
------- -------
mean_deg : float mean_deg : float
Mean angle Mean angle
""" """
return deg(np.arctan2(np.mean(sind(dir[:]), axis), np.mean(cosd(dir[:]), axis))) return deg(mean_rad(rad(dir), axis))
def mean_rad(dir, axis=0):
"""Mean of angles in radians
Parameters
----------
dir : array_like
Angles in radians
axis : int
if dir is 2d array_like, axis defines which axis to take the mean of
Returns
-------
mean_rad : float
Mean angle
"""
return np.arctan2(np.nanmean(np.sin(dir[:]), axis), np.nanmean(np.cos(dir[:]), axis))
def std_deg(dir): def std_deg(dir):
"""Standard deviation of angles in degrees """Standard deviation of angles in degrees
...@@ -50,8 +70,22 @@ def std_deg(dir): ...@@ -50,8 +70,22 @@ def std_deg(dir):
std_deg : float std_deg : float
standard deviation standard deviation
""" """
return deg(np.sqrt(1 - (np.mean(sind(dir)) ** 2 + np.mean(cosd(dir)) ** 2))) return deg(std_rad(rad(dir)))
def std_rad(dir):
"""Standard deviation of angles in radians
Parameters
----------
dir : array_like
Angles in radians
Returns
-------
std_rad : float
standard deviation
"""
return np.sqrt(1 - (np.nanmean(np.sin(dir)) ** 2 + np.nanmean(np.cos(dir)) ** 2))
def wsp_dir2uv(wsp, dir, dir_ref=None): def wsp_dir2uv(wsp, dir, dir_ref=None):
"""Convert horizontal wind speed and direction to u,v """Convert horizontal wind speed and direction to u,v
......
...@@ -57,11 +57,17 @@ class TestGeometry(unittest.TestCase): ...@@ -57,11 +57,17 @@ class TestGeometry(unittest.TestCase):
np.testing.assert_array_almost_equal(mean_deg(a, 1), [45, 0, -45]) np.testing.assert_array_almost_equal(mean_deg(a, 1), [45, 0, -45])
np.testing.assert_array_almost_equal(mean_deg(a.T, 0), [45, 0, -45]) np.testing.assert_array_almost_equal(mean_deg(a.T, 0), [45, 0, -45])
def test_mean_deg_nan(self):
self.assertEqual(mean_deg(np.array([0., 90, np.nan])), 45)
def test_std_deg(self): def test_std_deg(self):
self.assertEqual(std_deg(np.array([0, 0, 0])), 0) self.assertEqual(std_deg(np.array([0, 0, 0])), 0)
self.assertAlmostEqual(std_deg(np.array([0, 90, 180, 270])), 57.296, 2) self.assertAlmostEqual(std_deg(np.array([0, 90, 180, 270])), 57.296, 2)
def test_std_deg_nan(self):
self.assertAlmostEqual(std_deg(np.array([0, 90, 180, 270, np.nan])), 57.296, 2)
def test_wspdir2uv(self): def test_wspdir2uv(self):
u, v = wsp_dir2uv(np.array([1, 1, 1]), np.array([30, 0, 330])) u, v = wsp_dir2uv(np.array([1, 1, 1]), np.array([30, 0, 330]))
np.testing.assert_array_almost_equal(u, [0.8660, 1, 0.8660], 3) np.testing.assert_array_almost_equal(u, [0.8660, 1, 0.8660], 3)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment