npm package: @irreg/nj
Description: numpy in js
Latest version: 0.0.8

# nj
np in js

## Installation
via npm
```sh
npm i @irreg/nj
```
[Minified bundle file](./dist/bundle.min.cjs) for browser use

## Get started
Once installed, you can use it in both ES6 module and CommonJS formats or in browser.

**ES6 module (recommended)**
```javascript
import * as nj from '@irreg/nj';
```

**CommonJS**
```javascript
const nj = require('@irreg/nj');
```

**In browser**
```html
<script src="./bundle.min.cjs"></script>
<script>
    console.log(nj.arange(10));
</script>
```

## API
**Indexing**
```javascript
let a = nj.arange(10).at(nj.slice(5));
console.log(a); // array([5, 6, 7, 8, 9])
a = nj.arange(10).at(nj.slice(5, 0, -1));
console.log(a); // array([5, 4, 3, 2, 1])
a = nj.arange(10).at(':5').at('::-1');
console.log(a); // array([4, 3, 2, 1, 0])
a = nj.arange(10).at(nj.slice(5), null);
console.log(a); // array([[5], [6], [7], [8], [9]])
```
**Basic Indexing and view**
```javascript
let a = nj.arange(9).reshape(-1, 3);
let b = a.at(':', 0);
console.log(b); // array([0, 3, 6])
b.fill(-1);
console.log(b); // array([-1, -1, -1])
console.log(a); // array([[-1, 1, 2], [-1, 4, 5], [-1, 7, 8]])
```

**Advanced indexing and set**
```javascript
let a = nj.arange(9).reshape(-1, 3);
let mask = nj.greater(a, 5);
console.log(mask); // array([[false, false, false], [false, false, false], [true, true, true]])
let b = a.at(mask);
console.log(b); // array([6, 7, 8])
a.set([mask], -1);
console.log(a); // array([[0, 1, 2], [3, 4, 5], [-1, -1, -1]])
```

**Broadcasting**
```javascript
let a = nj.arange(9).reshape(-1, 3);
a = nj.add(a, [1, 2, 3]);
console.log(a); // array([[1, 3, 5], [4, 6, 8], [7, 9, 11]]
```

**Numerics**
```javascript
let a = nj.array([
	[1, 2, 3],
	[4, 5, 6],
]);
console.log(nj.cumsum(a)); // array([1, 3, 6, 10, 15, 21])
```
```javascript
console.log(nj.sum([[0, 1], [0, 5]], 0)); // array([0, 6])
console.log(nj.sum([[0, 1], [0, 5]], 1)); // array([1, 5])
```

**Flatten**
```javascript
let a = nj.arange(9).reshape(-1, 3);
a.set([[0, -1], 1], -1);
console.log(a.flatten()); // array([0, -1, 2, 3, 4, 5, 6, -1, 8])
```

It does most of what you expected with numpy.

## Documentation
To find more documentation on the APIs, you can visit  [https://zgtcktom.github.io/nj/](https://zgtcktom.github.io/nj/) (generated by jsdoc).

Both jsdoc comments and `.d.mts` typescript declaration files are available. Recommend using VSCode for code editing.
![VSCode screenshot](data:image/png;base64,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)

## Build from git
```sh
git clone https://github.com/zgtcktom/nj.git
npm install
npm run build
```