matrixFromFunction.js 2.9 KB

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