mean.js (3036B)
1 "use strict"; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.createMean = void 0; 7 8 var _collection = require("../../utils/collection.js"); 9 10 var _array = require("../../utils/array.js"); 11 12 var _factory = require("../../utils/factory.js"); 13 14 var _improveErrorMessage = require("./utils/improveErrorMessage.js"); 15 16 var name = 'mean'; 17 var dependencies = ['typed', 'add', 'divide']; 18 var createMean = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 19 var typed = _ref.typed, 20 add = _ref.add, 21 divide = _ref.divide; 22 23 /** 24 * Compute the mean value of matrix or a list with values. 25 * In case of a multi dimensional array, the mean of the flattened array 26 * will be calculated. When `dim` is provided, the maximum over the selected 27 * dimension will be calculated. Parameter `dim` is zero-based. 28 * 29 * Syntax: 30 * 31 * math.mean(a, b, c, ...) 32 * math.mean(A) 33 * math.mean(A, dim) 34 * 35 * Examples: 36 * 37 * math.mean(2, 1, 4, 3) // returns 2.5 38 * math.mean([1, 2.7, 3.2, 4]) // returns 2.725 39 * 40 * math.mean([[2, 5], [6, 3], [1, 7]], 0) // returns [3, 5] 41 * math.mean([[2, 5], [6, 3], [1, 7]], 1) // returns [3.5, 4.5, 4] 42 * 43 * See also: 44 * 45 * median, min, max, sum, prod, std, variance 46 * 47 * @param {... *} args A single matrix or or multiple scalar values 48 * @return {*} The mean of all values 49 */ 50 return typed(name, { 51 // mean([a, b, c, d, ...]) 52 'Array | Matrix': _mean, 53 // mean([a, b, c, d, ...], dim) 54 'Array | Matrix, number | BigNumber': _nmeanDim, 55 // mean(a, b, c, d, ...) 56 '...': function _(args) { 57 if ((0, _collection.containsCollections)(args)) { 58 throw new TypeError('Scalar values expected in function mean'); 59 } 60 61 return _mean(args); 62 } 63 }); 64 /** 65 * Calculate the mean value in an n-dimensional array, returning a 66 * n-1 dimensional array 67 * @param {Array} array 68 * @param {number} dim 69 * @return {number} mean 70 * @private 71 */ 72 73 function _nmeanDim(array, dim) { 74 try { 75 var sum = (0, _collection.reduce)(array, dim, add); 76 var s = Array.isArray(array) ? (0, _array.arraySize)(array) : array.size(); 77 return divide(sum, s[dim]); 78 } catch (err) { 79 throw (0, _improveErrorMessage.improveErrorMessage)(err, 'mean'); 80 } 81 } 82 /** 83 * Recursively calculate the mean value in an n-dimensional array 84 * @param {Array} array 85 * @return {number} mean 86 * @private 87 */ 88 89 90 function _mean(array) { 91 var sum; 92 var num = 0; 93 (0, _collection.deepForEach)(array, function (value) { 94 try { 95 sum = sum === undefined ? value : add(sum, value); 96 num++; 97 } catch (err) { 98 throw (0, _improveErrorMessage.improveErrorMessage)(err, 'mean', value); 99 } 100 }); 101 102 if (num === 0) { 103 throw new Error('Cannot calculate the mean of an empty array'); 104 } 105 106 return divide(sum, num); 107 } 108 }); 109 exports.createMean = createMean;