mad.js (2100B)
1 "use strict"; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.createMad = void 0; 7 8 var _array = require("../../utils/array.js"); 9 10 var _factory = require("../../utils/factory.js"); 11 12 var _improveErrorMessage = require("./utils/improveErrorMessage.js"); 13 14 var name = 'mad'; 15 var dependencies = ['typed', 'abs', 'map', 'median', 'subtract']; 16 var createMad = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 17 var typed = _ref.typed, 18 abs = _ref.abs, 19 map = _ref.map, 20 median = _ref.median, 21 subtract = _ref.subtract; 22 23 /** 24 * Compute the median absolute deviation of a matrix or a list with values. 25 * The median absolute deviation is defined as the median of the absolute 26 * deviations from the median. 27 * 28 * Syntax: 29 * 30 * math.mad(a, b, c, ...) 31 * math.mad(A) 32 * 33 * Examples: 34 * 35 * math.mad(10, 20, 30) // returns 10 36 * math.mad([1, 2, 3]) // returns 1 37 * math.mad([[1, 2, 3], [4, 5, 6]]) // returns 1.5 38 * 39 * See also: 40 * 41 * median, mean, std, abs 42 * 43 * @param {Array | Matrix} array 44 * A single matrix or multiple scalar values. 45 * @return {*} The median absolute deviation. 46 */ 47 return typed(name, { 48 // mad([a, b, c, d, ...]) 49 'Array | Matrix': _mad, 50 // mad(a, b, c, d, ...) 51 '...': function _(args) { 52 return _mad(args); 53 } 54 }); 55 56 function _mad(array) { 57 array = (0, _array.flatten)(array.valueOf()); 58 59 if (array.length === 0) { 60 throw new Error('Cannot calculate median absolute deviation (mad) of an empty array'); 61 } 62 63 try { 64 var med = median(array); 65 return median(map(array, function (value) { 66 return abs(subtract(value, med)); 67 })); 68 } catch (err) { 69 if (err instanceof TypeError && err.message.indexOf('median') !== -1) { 70 throw new TypeError(err.message.replace('median', 'mad')); 71 } else { 72 throw (0, _improveErrorMessage.improveErrorMessage)(err, 'mad'); 73 } 74 } 75 } 76 }); 77 exports.createMad = createMad;