Find mean of subarray means in a given array - GeeksforGeeks

15 Sep, 2021
You are given an array of n-elements you have to find the mean of the array as mean of all consecutive m-elements of array for all possible m-length array with consecutive elements. Examples:  
Input :arr[] = {3, 5, 1, 8, 9, 4}, 
           m = 4 
Output : Mean = 5.16667
Explanation : {3, 5, 1, 8}, {5, 1, 8, 9}, 
{1, 8, 9, 4} are three set of m-consecu-
tive elements. Mean of mean of sets 
is (17/4 + 23/4 + 22/4 )/ 3

Input : arr[] = {9, 4}, m = 1
Output : Mean = 6.5
Explanation : {9}, {4} are two set of
1-consecutive element. Mean of means 
of sets is (9 + 4 )/ 2
 
A simple solution is to consider all subarrays of size m, compute their means. Finally return mean of means.An efficient solution is use the Sliding Window Algorithm for this problem where we find sum of m-length window and then add up mean of each window to a value sum. At last we will have our result by dividing total sum by number of window possible and that too is sum /(n-m+1). 
C++
Java
Python3
C#
PHP
Javascript
// CPP program to find mean of means#include <bits/stdc++.h>using namespace std; // function to find mean valuefloat findMean(int arr[], int n, int m){    // declare sum and winSum (window sum)    float sum = 0, winSum = 0;    int i = 0;     // find sum for 1st m-length window    for (; i < m; i++)        winSum += arr[i];    sum += (winSum / m);     // iterate over array to find sum    // of all m-length means    for (; i < n; i++) {        winSum = winSum - arr[i - m] + arr[i];        sum += (winSum / m);    }     // mean of means will be sum of means    // divided by no of such means    return (sum / (n - m + 1));} // Driver codeint main(){    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };    int n = sizeof(arr) / sizeof(arr[0]);    int m = 4;    cout << "Mean = " << findMean(arr, n, m);    return 0;}
// Java program to find mean of meansimport java.util.*;import java.lang.*; public class GeeksforGeeks{         // function to find mean value    public static float findMean(int arr[], int n,                                          int m){             // declare sum and winSum (window sum)        float sum = 0, winSum = 0;        int i = 0;         // find sum for 1st m-length window        for (; i < m; i++)            winSum += arr[i];        sum += (winSum / m);         // iterate over array to find sum        // of all m-length means        for (; i < n; i++) {            winSum = winSum - arr[i - m] + arr[i];            sum += (winSum / m);        }         // mean of means will be sum of means        // divided by no of such means        return (sum / (n - m + 1));    }         // driver code    public static void main(String argc[]){    int arr[] = { 2, 5, 7, 1, 9, 3, 9 };    int n = 7;    int m = 4;    System.out.println("Mean = " +                      findMean(arr, n, m));    }} /*This code is contributed by Sagar Shukla.*/
# Python3 program to find mean of means # function to find mean valuedef findMean(arr, n, m) :         # declare sum and winSum (window sum)    sum = float(0)    winSum = float(0)    i = 0     # find sum for 1st m-length window    while (i < m):        winSum = winSum + arr[i]        i = i + 1    sum = sum + (winSum / m);     # iterate over array to find sum    # of all m-length means    while (i < n):        winSum = winSum - arr[i - m] + arr[i]        sum = sum + (winSum / m)        i = i + 1     # mean of means will be sum of means    # divided by no of such means    return (sum / (n - m + 1)); # Driven codearr = [ 2, 5, 7, 1, 9, 3, 9 ]n = len(arr)m = 4print ("Mean = ", findMean(arr, n, m)) # This code is contributed by "rishabh_jain".
// Java program to find mean of meansusing System; public class GeeksforGeeks{         // function to find mean value    public static float findMean(int []arr, int n,                                            int m)    {             // declare sum and winSum (window sum)        float sum = 0, winSum = 0;        int i = 0;         // find sum for 1st m-length window        for (; i < m; i++)            winSum += arr[i];                     sum += (winSum / m);         // iterate over array to find sum        // of all m-length means        for (; i < n; i++) {            winSum = winSum - arr[i - m] + arr[i];                         sum += (winSum / m);        }         // mean of means will be sum of means        // divided by no of such means        return (sum / (n - m + 1));    }         // driver code    public static void Main(){    int []arr = { 2, 5, 7, 1, 9, 3, 9 };    int n = 7;    int m = 4;         Console.WriteLine("Mean = " +                    findMean(arr, n, m));    }} /* This code is contributed by vt_m.*/
<?php// PHP program to find mean of means // function to find mean valuefunction findMean($arr, $n, $m){         // declare sum and    // winSum (window sum)    $sum = 0;    $winSum = 0;    $i = 0;     // find sum for 1st    // m-length window    for (; $i < $m; $i++)        $winSum += $arr[ $i];    $sum += ( $winSum / $m);     // iterate over array to find sum    // of all m-length means    for (; $i < $n; $i++)    {        $winSum = $winSum - $arr[ $i - $m] +                                 $arr[ $i];        $sum += ( $winSum / $m);    }     // mean of means will be sum of means    // divided by no of such means    return ($sum / ($n - $m + 1));}     // Driver code    $arr = array(2, 5, 7, 1, 9, 3, 9);    $n =count($arr);    $m = 4;    echo "Mean = ", findMean($arr, $n, $m); // This code is contributed by anuj_67?>
<script> // Javascript program to find mean of means // function to find mean valuefunction findMean(arr, n, m){    // declare sum and winSum (window sum)    var sum = 0, winSum = 0;    var i = 0;     // find sum for 1st m-length window    for (; i < m; i++)        winSum += arr[i];    sum += (winSum / m);     // iterate over array to find sum    // of all m-length means    for (; i < n; i++) {        winSum = winSum - arr[i - m] + arr[i];        sum += (winSum / m);    }     // mean of means will be sum of means    // divided by no of such means    return (sum / (n - m + 1));} // Driver codevar arr = [ 2, 5, 7, 1, 9, 3, 9 ];var n = arr.length;var m = 4;document.write( "Mean = " + findMean(arr, n, m)); </script>
Output:  
Mean = 4.9375 
vt_m
noob2000
sooda367
sliding-window
statistical-algorithms
Arrays
sliding-window
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Window Sliding Technique
Program to find sum of elements in a given array
Move all negative numbers to beginning and positive to end with constant extra space
Reversal algorithm for array rotation
Find duplicates in O(n) time and O(1) extra space | Set 1
Building Heap from Array
Next Greater Element
Trapping Rain Water
Sliding Window Maximum (Maximum of all subarrays of size k)
Count pairs with given sum