locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
20 lines (19 loc) • 1.09 kB
JavaScript
import { assertStatisticsArray, toStatisticNumber } from "../_helpers/_statistics.js";
export function geometric_mean(data) {
// discuss at: https://locutus.io/python/statistics/geometric_mean/
// parity verified: Python 3.12
// original by: Kevin van Zonneveld (https://kvz.io)
// note 1: Returns the geometric mean for a non-empty dataset of positive numbers.
// example 1: geometric_mean([54, 24, 36])
// returns 1: 36.000000000000014
// example 2: geometric_mean([1, 3, 9])
// returns 2: 3
// example 3: geometric_mean([2.5, 6.25])
// returns 3: 3.9528470752104745
const values = assertStatisticsArray(data, 'geometric_mean').map((value) => toStatisticNumber(value, 'geometric_mean'));
if (values.length === 0 || values.some((value) => value <= 0)) {
throw new Error('geometric mean requires a non-empty dataset containing positive numbers');
}
const logSum = values.reduce((sum, value) => sum + Math.log(value), 0);
return Math.exp(logSum / values.length);
}