A linear algebra library, written in TypeScript and accelerated with C++ bindings to BLAS and LAPACK.
Follow the installation instructions in nlapack and nblas to get maximum performance.
# with C++ bindings
$ npm install vectorious
# or, if you don't want C++ bindings
$ npm install vectorious --no-optional
There are three output bundles exposed in this package.
A node.js bundle, can be found in dist/index.js
and imported with the require()
syntax:
const v = require('vectorious');
A browser bundle, can be found in dist/index.browser.js
and imported with the <script>
tag:
<script src="dist/index.browser.js" />
It exposes a global variable named v
in the window
object and can be accessed like this:
<script>
const x = v.array([1, 2, 3]);
</script>
Added in version 6.1.0, vectorious exposes an ES module bundle at dist/index.esm.js
which can be imported using the import
syntax:
import { array } from 'vectorious';
const x = array([1, 2, 3]);
Unless stated otherwise, all operations are in-place, meaning that the result of the operation overwrites data in the current (or in the static case leftmost) array. To avoid this, an explicit copy
call is needed before the operation (copy(x)
or x.copy()
).
import { array, random, range } from 'vectorious';
// Create a random 2x2 matrix
const x = random(2, 2);
/*
array([
[
0.26472008228302,
0.4102575480937958
],
[
0.4068726599216461,
0.4589384198188782
]
], dtype=float64)
*/
// Create a one-dimensional vector with values from
// 0 through 8 and reshape it into a 3x3 matrix
const y = range(0, 9).reshape(3, 3);
/*
array([
[ 0, 1, 2 ],
[ 3, 4, 5 ],
[ 6, 7, 8 ]
], dtype=float64)
*/
// Add the second row of x to the first row of x
y.slice(0, 1).add(y.slice(1, 2));
/*
array([
[ 3, 5, 7 ],
[ 3, 4, 5 ],
[ 6, 7, 8 ]
], dtype=float64)
*/
// Swap the first and second rows of x
y.swap(0, 1);
/*
array([
[ 3, 4, 5 ],
[ 3, 5, 7 ],
[ 6, 7, 8 ]
], dtype=float64)
*/
// Create a 2x2x1 tensor
const z = array([
[[1], [2]],
[[3], [4]],
]);
/*
array([
[ [ 1 ], [ 2 ] ],
[ [ 3 ], [ 4 ] ]
], dtype=float64)
*/
Basic
Machine learning
All functions are accompanied with a .spec.ts
file.
The Jest testing framework is used for testing and the whole test suite can be run using a single command:
$ npm test
All functions are accompanied with a .bench.ts
file.
Run all benchmarks with:
$ npm run benchmark
Or for a single function with:
$ npx ts-node src/core/abs.bench.ts