A linear algebra library, written in TypeScript and accelerated with C++ bindings to BLAS and LAPACK.
Installation
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.
CommonJS
A node.js bundle, can be found in dist/index.js
and imported with the require()
syntax:
const v = require('vectorious');
Browser
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>
ES module
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]);
Usage
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)
*/
Documentation
Examples
Basic
Machine learning
Testing
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
Benchmarks
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