matrixFromFunction.js (3020B)
1 "use strict"; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.createMatrixFromFunction = void 0; 7 8 var _factory = require("../../utils/factory.js"); 9 10 var name = 'matrixFromFunction'; 11 var dependencies = ['typed', 'matrix', 'isZero']; 12 var createMatrixFromFunction = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 13 var typed = _ref.typed, 14 matrix = _ref.matrix, 15 isZero = _ref.isZero; 16 17 /** 18 * Create a matrix by evaluating a generating function at each index. 19 * The simplest overload returns a multi-dimensional array as long as `size` is an array. 20 * Passing `size` as a Matrix or specifying a `format` will result in returning a Matrix. 21 * 22 * Syntax: 23 * 24 * math.matrixFromFunction(size, fn) 25 * math.matrixFromFunction(size, fn, format) 26 * math.matrixFromFunction(size, fn, format, datatype) 27 * math.matrixFromFunction(size, format, fn) 28 * math.matrixFromFunction(size, format, datatype, fn) 29 * 30 * Examples: 31 * 32 * math.matrixFromFunction([3,3], i => i[0] - i[1]) // an antisymmetric matrix 33 * math.matrixFromFunction([100, 100], 'sparse', i => i[0] - i[1] === 1 ? 4 : 0) // a sparse subdiagonal matrix 34 * math.matrixFromFunction([5], i => math.random()) // a random vector 35 * 36 * See also: 37 * 38 * matrix, zeros 39 * 40 * @param {Array | Matrix} size The size of the matrix to be created 41 * @param {function} fn Callback function invoked for every entry in the matrix 42 * @param {string} [format] The Matrix storage format, either `'dense'` or `'sparse'` 43 * @param {string} [datatype] Type of the values 44 * @return {Array | Matrix} Returns the created matrix 45 */ 46 return typed(name, { 47 'Array | Matrix, function, string, string': function ArrayMatrixFunctionStringString(size, fn, format, datatype) { 48 return _create(size, fn, format, datatype); 49 }, 50 'Array | Matrix, function, string': function ArrayMatrixFunctionString(size, fn, format) { 51 return _create(size, fn, format); 52 }, 53 'Matrix, function': function MatrixFunction(size, fn) { 54 return _create(size, fn, 'dense'); 55 }, 56 'Array, function': function ArrayFunction(size, fn) { 57 return _create(size, fn, 'dense').toArray(); 58 }, 59 'Array | Matrix, string, function': function ArrayMatrixStringFunction(size, format, fn) { 60 return _create(size, fn, format); 61 }, 62 'Array | Matrix, string, string, function': function ArrayMatrixStringStringFunction(size, format, datatype, fn) { 63 return _create(size, fn, format, datatype); 64 } 65 }); 66 67 function _create(size, fn, format, datatype) { 68 var m; 69 70 if (datatype !== undefined) { 71 m = matrix(format, datatype); 72 } else { 73 m = matrix(format); 74 } 75 76 m.resize(size); 77 m.forEach(function (_, index) { 78 var val = fn(index); 79 if (isZero(val)) return; 80 m.set(index, val); 81 }); 82 return m; 83 } 84 }); 85 exports.createMatrixFromFunction = createMatrixFromFunction;