From 0e979cbf2e8ec1a8b0028a687d5dd1bf172245c5 Mon Sep 17 00:00:00 2001 From: Andrew McCluskey Date: Sat, 2 May 2020 11:04:57 +0100 Subject: [PATCH] add variance to distribution --- uravu/distribution.py | 23 +++++++++++++++++++++-- uravu/tests/test_distribution.py | 8 ++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/uravu/distribution.py b/uravu/distribution.py index 7be95b5..0597f1a 100644 --- a/uravu/distribution.py +++ b/uravu/distribution.py @@ -90,15 +90,34 @@ def n(self): return np.percentile(self.samples, [50])[0] @property - def s(self): + def s(self, ddof=1): """ Get the standard deviation of the distribution. For a non-normal distribution, this will return :py:attr:`None`. + Args: + ddof (:py:attr:`int`): Degrees of freedom to be included in calculation. + + Returns: + :py:attr:`float` or :py:attr:`None`: Standard deviation of the distribution. + """ + if self.normal: + return np.std(self.samples, ddof=ddof) + else: + return None + + @property + def v(self, ddof=1): + """ + Get the variance of the distribution. For a non-normal distribution, this will return :py:attr:`None`. + + Args: + ddof (:py:attr:`int`): Degrees of freedom to be included in calculation. + Returns: :py:attr:`float` or :py:attr:`None`: Standard deviation of the distribution. """ if self.normal: - return np.std(self.samples) + return np.var(self.samples, ddof=ddof) else: return None diff --git a/uravu/tests/test_distribution.py b/uravu/tests/test_distribution.py index fafaaa3..6c4b414 100644 --- a/uravu/tests/test_distribution.py +++ b/uravu/tests/test_distribution.py @@ -109,6 +109,14 @@ def test_check_normality_less_than_3(self): distro = Distribution(np.random.randn(2)) assert_equal(distro.normal, False) + def test_s(self): + """ + Test the standard deviation and variance + """ + distro = Distribution(np.random.randn(10000) * 10) + assert_almost_equal(distro.s, 10., decimal=1) + assert_almost_equal(distro.v, 100., decimal=0) + def test_add_samples_single(self): """ Test add_samples with a single value.