npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vecto

v0.7.9-beta

Published

A JS mini library to deal with ndarrays and vectors

Downloads

52

Readme

Codacy Badge Code Climate Build Status npm Coverage Status codecov

vecto :construction: :sparkles: :art:

@0.7.1

A JavaScript Mini Library to deal with N-dimensional arrays.

What's new

  • ndarray -> Ndarray
  • fill method
  • max & min methods
  • divide, exp,log,pow & sqrt in math

Upcoming

  • Choose function

Installation

npm install vecto

API

// for whole pkg
const vecto = require('vecto');

//selective 
const { Ndarray, core, math } = require('vecto');

Api List :

  • Ndarray
  • core
  • math

The Ndarray provides a class to construct ndarrays and operate on them.

Ndarray

Constructor
let v1 = new Ndarray(?[shape], ?'dtype', ?'initializer', ?[array]);
  • Shape : [Number] , Shape is the structure of the array, ex., shape of [2,3] means a 2x3 matrix having 2 array elements that have 3 elements each.

  • dtype : 'String', The data type for the elements of the array Options : { 'uint8','uint16','uint32','int8','int16','int32','float32','float64','uint8clamped' }

  • initializer : 'String', The initializer to initialize the data for the Ndarray Options : { 'zeros','linear','gaussian' }

  • Array : [[Number]], The Array that you want to create ndarray with.(if any).

Other Methods For creation
  • Ndarray.array(array)

/** Ndarray.array : This Constructs an ndarray object for passed in array. ** ** @array : [[Number]] ** ** Returns : { NdarrayObject } ** **/

ex :

let v = Ndarray.array([[1,2,3],[4,5,6]]);
  • Ndarray.zeroes(shape)

/** Ndarray.zeros : Constructs an ndarray object of given shape filled with placeholder 0's. ** ** @shape : [Number], the shape of the ndarray ** ** Returns : { NdarrayObject } ** **/

ex :

let zv = Ndarray.zeroes([2,2,3]);

Ndarray properties and methods

Properties
  • this.shape : [Number], It defines the structure of the ndarray.

  • this.array : [[Number]], Data of the ndarray.

  • this.size : int, The total number of elements in the ndarray.

  • this.dim : int, The Dimensions of the ndarray ( number of dimensions ).

  • this.dtype : 'String', The Data type of the elements of the array, currently only numbers are supported.

  • this.flat : TypedArrayObject, 1-D version of the ndarray, stored as typed arrays, Faster operations can be performed on this.

Methods
  • NdarrayObject.resize([new_shape])

This Method is used to alter the shape of an already existing ndarray, The new shape in form of array is provided and the current ndarray object is rearranged according to this new shape.

ex :

let nv = new ndarray([2,2,3],[[[5,5,5],[5,5,5]],[[5,5,5],[5,5,5]]],'float32');
// nv.array = [[[5,5,5],[5,5,5]],[[5,5,5],[5,5,5]]];
nv.resize([2,3]);
//nv.array = [[5,5,5],[5,5,5]]
  • NdarrayObject.reshape([new_shape])

This method is used to rearrange an already existing ndarray object, The new shape in form of array is provided and the current ndarray object is rearranged only if the size for the new shape === the size for the old shape , i.e., the total number of elements in both configurations remain the same.

ex :

let nv = new ndarray([2,2,3],[[[5,5,5],[5,5,5]],[[5,5,5],[5,5,5]]],'float32');
// nv.array = [[[5,5,5],[5,5,5]],[[5,5,5],[5,5,5]]];
nv.reshape([2,3]); // not possible
nv.reshape([6,2]);
//nv.array = [[5,5],[5,5],[5,5],[5,5],[5,5],[5,5]]
  • *NdarrayObject.flatten()

Creates 1-D form of the ndarray. * = called implicitly (don't need to call explicitly).

  • NdarrayObject.arrange([array])

Arranges The passed in 1-d array according to the shape of the NdarrayObject

ex :

let nv = new ndarray([2,3]);
nv.arrange([2]);
//nv.array = [[2,2,2],[2,2,2]]
nv.arrange([1,2]);
//nv.array = [[1,2,1],[2,1,2]]
nv.arrange([1,2,3,4,5,6,7]);
//nv.array = [[1,2,3],[4,5,6]]
  • NdarrayObject.transpose()

Performs transpose operation on 2d ndarrays (nd not supported yet) and returns the transposed array. : return type = array.

ex :

let nv = new ndarray([2,3]);
nv.arrange([1,2,3,4,5,6]);
//nv.array = [[1,2,3],[4,5,6]]
console.log(nv.transpose())
//[[1,4],[2,5],[3,6]]
  • NdarrayObject.fill() fill the Ndarray according to a distribution ex :
let nd = new Ndarray([2,3]);
nd.fill('gaussian',0,1);
//      initializer,mean,stdDev
nd.fill('linear',2);
// fills the array with 2s;
nd.fill('linear',2,5);
// provided a range [min-max], fills with steps of 1 or min;
nd.fill('linear',2,25,2);
// fills in the range of 2 and 25 with steps of 2;
nd.fill('zeros');
// fills with zeros;

math

Provides The Following functions :

  • math.divide(arg1,arg2)
  • math.exp(arg1)
  • math.log(arg1)
  • math.max(arg1,arg2,axis)
  • math.min(arg1,arg2,axis)
  • math.pow(arg1,pow)
  • math.product(arg1,arg2,mode)
  • math.sum(arg1,?arg2)

// Most of them are just wrappers around the normal Math class methods

  • math.product
product([arg1],[arg2],mode='string');

return type : array

Modes :

  • dot : Performs hadmard product or elementwise product on the arrays.
  • matrix : Performs matrix multiplication

ex :

b = [[10,20,30],[10,10,10]]

console.log(product(a,b,'dot'));
// [[10,40,90],[40,50,60]]
**************************

let a = [[1,2,3],[4,5,6],[2,4,6]],
b = [2,4,5];
console.log(product(a,b,'dot'));
//[[2,4,6],[16,20,24],[10,20,30]]
console.log(product(a,b,'matrix'));
//[ [ 2, 4, 6 ], [ 16, 20, 24 ], [ 35, 40, 45 ] ]
**************************

let a = [1,2,3],
b = [1,2,3];
console.log(product(a,b,'dot'));
//[1,4,9]

**************************
  • math.sum

Performs addition on two ndarrays.

Core

The core object exports all the methods to normal arrays instead of just ndarray objects.

Methods provided by the core are :

  • core.arrange([shape],[array])

Takes in the shape of the ndarray in which the passed elements are to be arranged.

ex :

let elems_arr = [1,2,3,4,5,6,7,8,9,10];
let nd = core.arrange([2,5],elems_arr);
//nd = [[1,2,3,4,5],[6,7,8,9,10]]
  • core.calc_shape([array])

Takes in an array and outputs the shape(configuration) of that array.

ex :

let ar = [[[1,2],[4,5]],[[2,3],[6,7]],[[7,8],[9,1]]],
shape = core.calc_shape(ar);
//shape = [3,2,2];
  • core.calc_size([array])

Takes in a array and calculates the size of the ndarray.

ex :

let shape = [4,5];
console.log(core.calc_size(shape));
//20
  • clip([array],min_val/[min_val],max_val/[max_val])

Makes the array elements contained in a limit provided as min_val and max_val.

[array] : the array to be clipped. min_val/[min_val] : the minimum limit for the data in the array. if provided as array, it's shape should match the shape of the provided array, with every element of the [min_val]describing the min val for the respective element of the provided array.

max_val/[max_val] : the maximum limit for the data in the array. if provided as array, it's shape should match the shape of the provided array, with every element of the [max_val]describing the max val for the respective element of the provided array.

( ^ = only one of min_val or max_val could be null.)

example :


let a = [[10,24,12,3],[7,1,20,9]];
clip(a,10,12);
// returns [[10,12,12,10],[10,10,12,10]]

clip(a,[[10,12,14,4],[8,0,10,10]],[[12,20,20,31],[10,1,10,10]]);
//returns [ [ 10, 20, 14, 4 ], [ 8, 1, 10, 10 ] ]

clip(a,[[10,12,14,4],[8,0,10,10]],2);
//returns [ [ 2, 2, 14, 4 ], [ 8, 1, 2, 10 ] ]
  • core.find_dim([array])

Return the dimension of the array

  • core.flatten([array])

Takes in an ndarray. Return the flattened version(1d) version of ndarray.

example :


let a = [[[1,2],[3,4]],[[5,6],[7,8]]];
core.flatten(a);
//returns [1,2,3,4,5,6,7,8];
  • core.form_chunks(size,number,[array])

size : The Size of a chunk. number : the number of chunks to be formed array : The array from which the chunks will be formed.

ex :

let ar = [1,2,3,4,5];
console.log(core.form_arr(2,2,ar));
//[[1,2],[3,4]]

let br = [[1,2,3],[4,5,6],[7,8,9]];
console.log(core.form_chunks(2,2,br));
//[[[1,2,3],[4,5,6]],[[7,8,9],[1,2,3]]]
  • core.transpose([arr],dtype='string')

Performs transpose operation on passed array.

@abtExp