Skip to content

mateogianolio/vectorious

Repository files navigation

Vectorious Logo

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

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 = v.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 = v.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