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