simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

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;