Coverage for src/foapy/characteristics/_geometric_mean.py: 100%

7 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-17 20:45 +0000

1import numpy as np 

2 

3 

4def geometric_mean(intervals, dtype=None): 

5 """ 

6 Calculates average geometric value of intervals lengths. 

7 

8 $$ \\Delta_g=\\sqrt[n]{\\prod_{i=1}^{n} \\Delta_{i}}$$ 

9 

10 where \\( \\Delta_{i} \\) represents each interval and \\( n \\) 

11 is the total number of intervals. 

12 

13 Parameters 

14 ---------- 

15 intervals : array_like 

16 An array of intervals 

17 dtype : dtype, optional 

18 The dtype of the output 

19 

20 Returns 

21 ------- 

22 : float 

23 The geometric mean of the input array of intervals. 

24 

25 Examples 

26 -------- 

27 

28 Calculate the geometric mean of intervals of a sequence. 

29 

30 ``` py linenums="1" 

31 import foapy 

32 import numpy as np 

33 

34 source = ['a', 'b', 'a', 'c', 'a', 'd'] 

35 intervals = foapy.intervals(source, foapy.binding.start, foapy.mode.normal) 

36 result = foapy.characteristics.geometric_mean(intervals) 

37 print(result) 

38 # 2.4018739103520055 

39 

40 # Improve precision by specifying a dtype. 

41 result = foapy.characteristics.geometric_mean(intervals, dtype=np.longdouble) 

42 print(result) 

43 # 2.4018739103520053365 

44 ``` 

45 """ 

46 n = len(intervals) 

47 

48 # Check for an empty list or a list with zeros 

49 if n == 0 or all(x == 0 for x in intervals): 

50 return 0 

51 

52 from foapy.characteristics import depth 

53 

54 return np.power(2, depth(intervals, dtype=dtype) / n, dtype=dtype)