📜  几何平均值(两种方法)

📅  最后修改于: 2021-05-07 08:00:31             🧑  作者: Mango

给定n个元素的数组,我们需要找到数字的几何平均值。通常,n个数的几何平均值是其乘积的n根。

If there are n elements x1, x2, x3, . . ., xn
   in an array and if we want to calculate the 
   geometric mean of the array elements is
   Geometric mean = (x1 * x2 * x3 * . . . * xn)1/n 

例子:

Input : arr[] = {1, 2, 3, 4, 5, 6, 7, 8}
Output : 3.76435
        = (1 * 2 * 3 * 4 * 5 * 6 * 7 * 8)1/8
        = 403201/8
        = 3.76435

Input : arr[] = {15, 12, 13, 19, 10}
Output : 13.447
        = (15 * 12 * 13 * 19 * 10)1/5
        = 4446001/5
        = 13.477

一个简单的解决方案是先将所有数字相乘,然后求出乘数的(1 / n)次方。

C++
// Program to calculate the geometric mean
// of the given array elements.
#include 
using namespace std;
  
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
    // declare product variable and
    // initialize it to 1.
    float product = 1;
  
    // Compute the product of all the
    // elements in the array.
    for (int i = 0; i < n; i++)
        product = product * arr[i];
  
    // compute geometric mean through formula
    // pow(product, 1/n) and return the value
    // to main function.
    float gm = pow(product, (float)1 / n);
    return gm;
}
  
// Driver function
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << geometricMean(arr, n);
    return 0;
}


Java
// Program to calculate the geometric mean
// of the given array elements.
import java.math.*;
  
class GFG{
      
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int arr[], int n)
    {
        // declare product variable and
        // initialize it to 1.
        float product = 1;
  
        // Compute the product of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            product = product * arr[i];
  
        // compute geometric mean through 
        // formula pow(product, 1/n) and
        // return the value to main function.
        float gm = (float)Math.pow(product, (float)1 / n);
        return gm;
    }
  
    // Driver function
    public static void main(String args[])
    {
        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.length ;
        System.out.println(geometricMean(arr, n));
    }
}
  
/*This code is contributed by Nikita Tiwari*/


Python
# Python Program to calculate the
# geometric mean of the given 
# array elements.
import math
  
# function to calculate geometric 
# mean and return float value.
def geometricMean(arr, n) :
      
    # declare product variable and
    # initialize it to 1.
    product = 1
      
    # Compute the product of all the
    # elements in the array.
    for i in range(0,n) :
        product = product * arr[i]
   
    # compute geometric mean through 
    # formula pow(product, 1/n) and
    # return the value to main function.
    gm = (float)(math.pow(product, (1 / n)))
    return (float)(gm)
      
      
# Driver function
arr = [ 1, 2, 3, 4, 5, 6, 7, 8]
n = len(arr)
  
# to print 6 digits after decimal
print ('{0:.6f}'.format(geometricMean(arr, n)))
  
   
# This code is contributed by Nikita Tiwari


C#
// Program to calculate the geometric mean
// of the given array elements.
using System;
  
class GFG{
      
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int []arr, int n)
    {
        // declare product variable and
        // initialize it to 1.
        float product = 1;
  
        // Compute the product of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            product = product * arr[i];
  
        // compute geometric mean through 
        // formula pow(product, 1/n) and
        // return the value to main function.
        float gm = (float)Math.Pow(product, (float)1 / n);
        return gm;
    }
  
    // Driver function
    public static void Main()
    {
        int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.Length ;
        Console.WriteLine(geometricMean(arr, n));
    }
}
  
/*This code is contributed by vt_m*/


PHP


C++
// Program to calculate the geometric mean
// of the given array elements.
#include 
using namespace std;
  
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
    // declare sum variable and
    // initialize it to 1.
    float sum = 0;
  
    // Compute the sum of all the
    // elements in the array.
    for (int i = 0; i < n; i++)
        sum = sum + log(arr[i]);
  
    // compute geometric mean through formula
    // antilog(((log(1) + log(2) + . . . + log(n))/n)
    // and return the value to main function.
    sum = sum / n;
  
    return exp(sum);
}
  
// Driver function
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    // function call
    cout << geometricMean(arr, n);
    return 0;
}


Java
// Java Program to calculate the geometric mean
// of the given array elements.
import java.io.*;
  
class GFG 
{
      
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int []arr, int n)
    {
        // declare sum variable and
        // initialize it to 1.
        float sum = 0;
      
        // Compute the sum of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            sum = sum + (float)Math.log(arr[i]);
      
        // compute geometric mean through formula
        // antilog(((log(1) + log(2) + . . . + log(n))/n)
        // and return the value to main function.
        sum = sum / n;
      
        return (float)Math.exp(sum);
    }
      
    // Driver function
    public static void main (String[] args)
    {
        int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.length;
          
        // function call
        System.out.println(geometricMean(arr, n));
      
    }
}
  
// This code is contributed by vt_m.


Python3
# Program to calculate the 
# geometric mean of the 
# given array elements.
import math
  
# function to calculate 
# geometric mean and 
# return float value.
def geometricMean(arr, n):
      
    # declare sum variable and
    # initialize it to 1.
    sum = 0;
      
    # Compute the sum of all 
    # the elements in the array.
    for i in range(n):
        sum = sum + math.log(arr[i]);
      
    # compute geometric mean 
    # through formula antilog
    # (((log(1) + log(2) + . .
    # ... + log(n))/n)
    # and return the value to 
    # main function.
    sum = sum / n;
      
    return math.exp(sum);
  
# Driver Code
arr= [ 1, 2, 3, 4, 5, 6, 7, 8 ];
n = len(arr);
  
# function call
print(geometricMean(arr, n));
  
# This code is contributed by mits.


C#
// Program to calculate the geometric mean
// of the given array elements.
using System;
  
class GFG {
  
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int []arr, int n)
    {
        // declare sum variable and
        // initialize it to 1.
        float sum = 0;
      
        // Compute the sum of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            sum = sum + (float)Math.Log(arr[i]);
      
        // compute geometric mean through formula
        // antilog(((log(1) + log(2) + . . . + log(n))/n)
        // and return the value to main function.
        sum = sum / n;
      
        return (float)Math.Exp(sum);
    }
      
    // Driver function
    public static void Main () 
    {
        int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.Length;
          
        // function call
        Console.WriteLine(geometricMean(arr, n));
      
    }
}
  
// This code is contributed by vt_m.


PHP


输出:

3.76435

上面的解决方案只是导致溢出。更好的解决方案是使用日志。有n个数字,我们需要使用以下公式计算几何平均值:

Geometric mean = Antilog((log(x1) + log(x2) +
                 log(x3) + . . . + log(xn))/n)  

为了在编程中计算Antilog,我们使用指数函数(exp())

C++

// Program to calculate the geometric mean
// of the given array elements.
#include 
using namespace std;
  
// function to calculate geometric mean
// and return float value.
float geometricMean(int arr[], int n)
{
    // declare sum variable and
    // initialize it to 1.
    float sum = 0;
  
    // Compute the sum of all the
    // elements in the array.
    for (int i = 0; i < n; i++)
        sum = sum + log(arr[i]);
  
    // compute geometric mean through formula
    // antilog(((log(1) + log(2) + . . . + log(n))/n)
    // and return the value to main function.
    sum = sum / n;
  
    return exp(sum);
}
  
// Driver function
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
    int n = sizeof(arr) / sizeof(arr[0]);
    // function call
    cout << geometricMean(arr, n);
    return 0;
}

Java

// Java Program to calculate the geometric mean
// of the given array elements.
import java.io.*;
  
class GFG 
{
      
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int []arr, int n)
    {
        // declare sum variable and
        // initialize it to 1.
        float sum = 0;
      
        // Compute the sum of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            sum = sum + (float)Math.log(arr[i]);
      
        // compute geometric mean through formula
        // antilog(((log(1) + log(2) + . . . + log(n))/n)
        // and return the value to main function.
        sum = sum / n;
      
        return (float)Math.exp(sum);
    }
      
    // Driver function
    public static void main (String[] args)
    {
        int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.length;
          
        // function call
        System.out.println(geometricMean(arr, n));
      
    }
}
  
// This code is contributed by vt_m. 

Python3

# Program to calculate the 
# geometric mean of the 
# given array elements.
import math
  
# function to calculate 
# geometric mean and 
# return float value.
def geometricMean(arr, n):
      
    # declare sum variable and
    # initialize it to 1.
    sum = 0;
      
    # Compute the sum of all 
    # the elements in the array.
    for i in range(n):
        sum = sum + math.log(arr[i]);
      
    # compute geometric mean 
    # through formula antilog
    # (((log(1) + log(2) + . .
    # ... + log(n))/n)
    # and return the value to 
    # main function.
    sum = sum / n;
      
    return math.exp(sum);
  
# Driver Code
arr= [ 1, 2, 3, 4, 5, 6, 7, 8 ];
n = len(arr);
  
# function call
print(geometricMean(arr, n));
  
# This code is contributed by mits.

C#

// Program to calculate the geometric mean
// of the given array elements.
using System;
  
class GFG {
  
    // function to calculate geometric mean
    // and return float value.
    static float geometricMean(int []arr, int n)
    {
        // declare sum variable and
        // initialize it to 1.
        float sum = 0;
      
        // Compute the sum of all the
        // elements in the array.
        for (int i = 0; i < n; i++)
            sum = sum + (float)Math.Log(arr[i]);
      
        // compute geometric mean through formula
        // antilog(((log(1) + log(2) + . . . + log(n))/n)
        // and return the value to main function.
        sum = sum / n;
      
        return (float)Math.Exp(sum);
    }
      
    // Driver function
    public static void Main () 
    {
        int []arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
        int n = arr.Length;
          
        // function call
        Console.WriteLine(geometricMean(arr, n));
      
    }
}
  
// This code is contributed by vt_m. 

的PHP


输出:

3.76435