{"_id":"matrixflow-js","_rev":"4-b52e34cfeb82edded90fd62e2f0dde11","name":"matrixflow-js","dist-tags":{"latest":"3.2.2"},"versions":{"3.2.1":{"name":"matrixflow-js","version":"3.2.1","keywords":["matrixflow","matrix","linear-algebra","decomposition","SVD","EVD","LU","QR","Cholesky","eigenvalue","javascript","typescript"],"author":{"name":"LinNianPing","email":"lin.n.ping@proton.me"},"license":"MIT","_id":"matrixflow-js@3.2.1","maintainers":[{"name":"linnianping","email":"lin.n.ping@proton.me"}],"homepage":"https://matrixflow-js.github.io/matrixflow-js/","bugs":{"url":"https://github.com/MATRIXFLOW-JS/matrixflow-js/issues","email":"lin.n.ping@proton.me"},"dist":{"shasum":"7e22795bb3e612795182becd2945beff967a31c5","tarball":"https://registry.npmjs.org/matrixflow-js/-/matrixflow-js-3.2.1.tgz","fileCount":48,"integrity":"sha512-vZFPJvDyqYwVy+f7bjGIRmgZcb+6iQz1UFF/deynDsPUiboZm4deSVIrJyEiIAkb6IbfeeB/IBBSf4cBw250Uw==","signatures":[{"sig":"MEUCIHR4uQckA9vj90qInBKoTNlrrouODalDdqqiFxrcEmIlAiEA+cFA2wHMHhpg7hLb6vGZeExNKlAL/4yft67zVrF+OLw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1999768},"main":"matrix.js","types":"matrix.d.ts","unpkg":"matrix.umd.js","module":"src/index.js","exports":{".":{"types":"./matrix.d.ts","default":"./matrix.mjs","require":"./matrix.js"}},"scripts":{"test":"npm run test-only && npm run eslint && npm run prettier","eslint":"eslint src testUtils.js","compile":"rollup -c","prettier":"prettier --check src","test-only":"vitest run --coverage","eslint-fix":"npm run eslint -- --fix","prettier-write":"prettier --write src","build-esm-facade":"node tools/build-esm-facade.mjs"},"_npmUser":{"name":"linnianping","email":"lin.n.ping@proton.me"},"jsdelivr":"matrix.umd.js","deprecated":"It has critical vulnerabilities. Please use the matrixflow-js@3.2.2.","repository":{"url":"git+https://github.com/MATRIXFLOW-JS/matrixflow-js.git","type":"git"},"_npmVersion":"11.10.1","description":"Dense matrix computation and linear algebra for JavaScript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"is-any-array":"^3.0.0","ml-array-rescale":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","mathjs":"^14.5.2","rollup":"^4.44.0","vitest":"^3.2.4","numeric":"^1.2.6","ml-xsadd":"^3.0.1","prettier":"^3.5.3","benchmark":"^2.1.4","csv-parse":"^5.6.0","pretty-hrtime":"^1.0.3","ml-dataset-iris":"^1.2.1","ml-sparse-matrix":"^3.1.0","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","eslint-config-cheminfo":"^14.1.1","@rollup/plugin-commonjs":"^28.0.6","jest-matcher-deep-close-to":"^3.0.2","@rollup/plugin-node-resolve":"^16.0.3","@babel/plugin-transform-modules-commonjs":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/matrixflow-js_3.2.1_1787071156611_0.12149474283463957","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"matrixflow-js","version":"3.2.2","keywords":["matrixflow","matrix","linear-algebra","decomposition","SVD","EVD","LU","QR","Cholesky","eigenvalue","javascript","typescript"],"author":{"name":"LinNianPing","email":"lin.n.ping@proton.me"},"license":"MIT","_id":"matrixflow-js@3.2.2","maintainers":[{"name":"linnianping","email":"lin.n.ping@proton.me"}],"homepage":"https://matrixflow-js.github.io/matrixflow-js/","bugs":{"url":"https://github.com/MATRIXFLOW-JS/matrixflow-js/issues","email":"lin.n.ping@proton.me"},"dist":{"shasum":"4ca5602d548a016d482ef8620b1640298fbcd5b8","tarball":"https://registry.npmjs.org/matrixflow-js/-/matrixflow-js-3.2.2.tgz","fileCount":44,"integrity":"sha512-OrVOmWGcLrerF94cyIVFoFf6H+Q1T3JrZIGNGUG3VAvcAHrTm0TFzSMKf2glnay5wWBXvdfqnxYfhFS5/44Onw==","signatures":[{"sig":"MEYCIQC4K97YsoVoeXv5pb3S35My1xAc/lJDtY/ABfnbO3V+JQIhAIQPQHGAizpLr3kr4DmQFiO3eW/KGo/M1pqR8FcyZMBI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1110160},"main":"matrix.js","types":"matrix.d.ts","unpkg":"matrix.umd.js","module":"src/index.js","exports":{".":{"types":"./matrix.d.ts","default":"./matrix.mjs","require":"./matrix.js"}},"scripts":{"test":"npm run test-only && npm run eslint && npm run prettier","eslint":"eslint src testUtils.js","compile":"rollup -c","prettier":"prettier --check src","test-only":"vitest run --coverage","eslint-fix":"npm run eslint -- --fix","prettier-write":"prettier --write src","build-esm-facade":"node tools/build-esm-facade.mjs"},"_npmUser":{"name":"linnianping","email":"lin.n.ping@proton.me"},"jsdelivr":"matrix.umd.js","repository":{"url":"git+https://github.com/MATRIXFLOW-JS/matrixflow-js.git","type":"git"},"_npmVersion":"11.10.1","description":"Dense matrix computation and linear algebra for JavaScript","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"is-any-array":"^3.0.0","ml-array-rescale":"^2.0.0"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.29.0","mathjs":"^14.5.2","rollup":"^4.44.0","vitest":"^3.2.4","numeric":"^1.2.6","ml-xsadd":"^3.0.1","prettier":"^3.5.3","benchmark":"^2.1.4","csv-parse":"^5.6.0","pretty-hrtime":"^1.0.3","ml-dataset-iris":"^1.2.1","ml-sparse-matrix":"^3.1.0","@vitest/coverage-v8":"^3.2.4","@rollup/plugin-terser":"^0.4.4","eslint-config-cheminfo":"^14.1.1","@rollup/plugin-commonjs":"^28.0.6","jest-matcher-deep-close-to":"^3.0.2","@rollup/plugin-node-resolve":"^16.0.3","@babel/plugin-transform-modules-commonjs":"^7.27.1"},"_npmOperationalInternal":{"tmp":"tmp/matrixflow-js_3.2.2_1787640530292_0.5130218899349657","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-08-18T16:39:16.573Z","modified":"2026-08-25T06:54:55.163Z","3.2.1":"2026-08-18T16:39:16.781Z","3.2.2":"2026-08-25T06:48:50.447Z"},"bugs":{"url":"https://github.com/MATRIXFLOW-JS/matrixflow-js/issues","email":"lin.n.ping@proton.me"},"author":{"name":"LinNianPing","email":"lin.n.ping@proton.me"},"license":"MIT","homepage":"https://matrixflow-js.github.io/matrixflow-js/","keywords":["matrixflow","matrix","linear-algebra","decomposition","SVD","EVD","LU","QR","Cholesky","eigenvalue","javascript","typescript"],"repository":{"url":"git+https://github.com/MATRIXFLOW-JS/matrixflow-js.git","type":"git"},"description":"Dense matrix computation and linear algebra for JavaScript","maintainers":[{"name":"linnianping","email":"lin.n.ping@proton.me"}],"readme":"# matrixflow-js\r\n\r\nDense matrix computation and linear algebra for JavaScript.\r\n\r\n[![npm](https://img.shields.io/npm/v/matrixflow-js.svg)](https://www.npmjs.com/package/matrixflow-js)\r\n[![CI](https://github.com/MATRIXFLOW-JS/matrixflow-js/actions/workflows/nodejs.yml/badge.svg?branch=main)](https://github.com/MATRIXFLOW-JS/matrixflow-js/actions/workflows/nodejs.yml)\r\n[![license](https://img.shields.io/npm/l/matrixflow-js.svg)](./LICENSE)\r\n[![homepage](https://img.shields.io/badge/docs-homepage-3ee0b0)](https://matrixflow-js.github.io/matrixflow-js/)\r\n\r\n**matrixflow-js** is a typed library for building, transforming, and decomposing dense matrices in Node.js and the browser. Create matrices, run element-wise and linear-algebra operations, and factorize with SVD, EVD, LU, QR, Cholesky, and NIPALS — all from one package.\r\n\r\nHomepage: [https://matrixflow-js.github.io/matrixflow-js/](https://matrixflow-js.github.io/matrixflow-js/)\r\n\r\n## Features\r\n\r\n- Dense `Matrix` with Float64-backed storage and a full operator surface\r\n- Views that slice, transpose, or flip without copying data\r\n- `SymmetricMatrix` and `DistanceMatrix` for structured data\r\n- Decompositions: SVD, EVD, LU, QR, Cholesky, NIPALS\r\n- Solvers: inverse, pseudo-inverse, least squares\r\n- Statistics: mean, variance, covariance, correlation, center, scale\r\n- ESM, CommonJS, and a minified UMD build\r\n- TypeScript definitions included\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install matrixflow-js\r\n```\r\n\r\n## Quick start\r\n\r\n### ES modules\r\n\r\n```js\r\nimport { Matrix } from 'matrixflow-js';\r\n\r\nconst matrix = Matrix.ones(5, 5);\r\n```\r\n\r\n### CommonJS\r\n\r\n```js\r\nconst { Matrix } = require('matrixflow-js');\r\n\r\nconst matrix = Matrix.ones(5, 5);\r\n```\r\n\r\n### Browser (CDN)\r\n\r\n```html\r\n<script src=\"https://cdn.jsdelivr.net/npm/matrixflow-js/matrix.umd.js\"></script>\r\n<script>\r\n  const { Matrix } = matrixflow;\r\n  console.log(Matrix.eye(3).toString());\r\n</script>\r\n```\r\n\r\n## Usage\r\n\r\n### Create matrices\r\n\r\n```js\r\nimport { Matrix } from 'matrixflow-js';\r\n\r\nconst A = new Matrix([\r\n  [1, 1],\r\n  [2, 2],\r\n]);\r\n\r\nconst zeros = Matrix.zeros(3, 2);\r\nconst ones = Matrix.ones(2, 3);\r\nconst identity = Matrix.eye(3, 4);\r\nconst diagonal = Matrix.diag([1, 2, 3]);\r\n```\r\n\r\n### Arithmetic\r\n\r\n```js\r\nimport { Matrix } from 'matrixflow-js';\r\n\r\nconst A = new Matrix([\r\n  [1, 1],\r\n  [2, 2],\r\n]);\r\nconst B = new Matrix([\r\n  [3, 3],\r\n  [1, 1],\r\n]);\r\n\r\nMatrix.add(A, B); // [[4, 4], [3, 3]]\r\nMatrix.sub(A, B); // [[-2, -2], [1, 1]]\r\nA.mmul(B); // matrix product\r\nMatrix.mul(A, 10); // scalar multiply\r\nMatrix.div(A, 10); // scalar divide\r\nMatrix.max(A, B);\r\nMatrix.min(A, B);\r\n```\r\n\r\nIn-place variants mutate the receiver:\r\n\r\n```js\r\nconst C = B.clone();\r\nC.add(A);\r\nC.mul(10);\r\n```\r\n\r\n### Math functions\r\n\r\n```js\r\nconst A = new Matrix([\r\n  [1, 1],\r\n  [-1, -1],\r\n]);\r\n\r\nMatrix.exp(A);\r\nMatrix.cos(A);\r\nMatrix.abs(A);\r\nA.clone().abs(); // in place\r\n```\r\n\r\nAvailable: `abs`, `acos`, `acosh`, `asin`, `asinh`, `atan`, `atanh`, `cbrt`, `ceil`, `clz32`, `cos`, `cosh`, `exp`, `expm1`, `floor`, `fround`, `log`, `log1p`, `log10`, `log2`, `round`, `sign`, `sin`, `sinh`, `sqrt`, `tan`, `tanh`, `trunc`.\r\n\r\n### Inspect and reshape\r\n\r\n```js\r\nA.rows;\r\nA.columns;\r\nA.size;\r\nA.get(0, 0);\r\nA.set(1, 0, 10);\r\nA.diag();\r\nA.mean();\r\nA.prod();\r\nA.norm();\r\nA.transpose();\r\nA.isSquare();\r\nA.isSymmetric();\r\n```\r\n\r\n### Rows, columns, and concatenation\r\n\r\n```js\r\nconst M = new Matrix([\r\n  [1, 2, 3],\r\n  [4, 5, 6],\r\n]);\r\n\r\nconst sumOf = (vector) => vector.reduce((total, value) => total + value, 0);\r\n\r\nM.applyAlongAxis(sumOf, 'row'); // [6, 15]\r\nM.applyAlongAxis(sumOf, 'column'); // [5, 7, 9]\r\n\r\nM.concat([[7, 8, 9]]);\r\nM.concat(Matrix.columnVector([7, 8]), 'column');\r\n```\r\n\r\n## Linear algebra\r\n\r\n```js\r\nimport {\r\n  Matrix,\r\n  inverse,\r\n  solve,\r\n  linearDependencies,\r\n  QrDecomposition,\r\n  LuDecomposition,\r\n  CholeskyDecomposition,\r\n  EigenvalueDecomposition,\r\n  SingularValueDecomposition,\r\n} from 'matrixflow-js';\r\n```\r\n\r\n### Inverse and pseudo-inverse\r\n\r\n```js\r\nconst A = new Matrix([\r\n  [2, 3, 5],\r\n  [4, 1, 6],\r\n  [1, 3, 0],\r\n]);\r\n\r\nconst inverseA = inverse(A);\r\nA.mmul(inverseA); // ~ identity\r\n\r\nconst singular = new Matrix([\r\n  [1, 2, 3],\r\n  [4, 5, 6],\r\n  [7, 8, 9],\r\n]);\r\ninverse(singular, true); // SVD-based inverse\r\n\r\nconst tall = new Matrix([\r\n  [1, 2],\r\n  [3, 4],\r\n  [5, 6],\r\n]);\r\ntall.pseudoInverse();\r\n```\r\n\r\n### Least squares\r\n\r\nSolve `A · x = B`:\r\n\r\n```js\r\nconst A = new Matrix([\r\n  [3, 1],\r\n  [4.25, 1],\r\n  [5.5, 1],\r\n  [8, 1],\r\n]);\r\nconst B = Matrix.columnVector([4.5, 4.25, 5.5, 5.5]);\r\nconst x = solve(A, B);\r\n```\r\n\r\nPass `true` as the third argument to use SVD when `A` is singular.\r\n\r\n### Decompositions\r\n\r\n```js\r\nconst A = new Matrix([\r\n  [2, 3, 5],\r\n  [4, 1, 6],\r\n  [1, 3, 0],\r\n]);\r\n\r\nconst QR = new QrDecomposition(A);\r\nQR.orthogonalMatrix;\r\nQR.upperTriangularMatrix;\r\n\r\nconst LU = new LuDecomposition(A);\r\nLU.lowerTriangularMatrix;\r\nLU.upperTriangularMatrix;\r\nLU.pivotPermutationVector;\r\n\r\nconst cholesky = new CholeskyDecomposition(A);\r\ncholesky.lowerTriangularMatrix;\r\n\r\nconst evd = new EigenvalueDecomposition(A);\r\nevd.realEigenvalues;\r\nevd.imaginaryEigenvalues;\r\nevd.eigenvectorMatrix;\r\n\r\nconst svd = new SingularValueDecomposition(A);\r\nsvd.diagonal;\r\nsvd.leftSingularVectors;\r\nsvd.rightSingularVectors;\r\n```\r\n\r\n### Linear dependencies\r\n\r\n```js\r\nconst A = new Matrix([\r\n  [2, 0, 0, 1],\r\n  [0, 1, 6, 0],\r\n  [0, 3, 0, 1],\r\n  [0, 0, 1, 0],\r\n  [0, 1, 2, 0],\r\n]);\r\n\r\nlinearDependencies(A);\r\n```\r\n\r\n## Documentation\r\n\r\nFull homepage, live playground, and API overview:\r\n\r\n**[https://matrixflow-js.github.io/matrixflow-js/](https://matrixflow-js.github.io/matrixflow-js/)**\r\n\r\nThe homepage deploys automatically on every push to `main`. In the GitHub repository, set **Settings → Pages → Source** to **GitHub Actions**.\r\n\r\nTypeScript definitions ship with the package (`matrix.d.ts`).\r\n\r\n## License\r\n\r\n[MIT](./LICENSE) © LinNianPing ([lin.n.ping@proton.me](mailto:lin.n.ping@proton.me))\r\n","readmeFilename":"README.md"}