#ndarray #dendritic #ops #shape #scalar #aggregate #binary

bin+lib dendritic-ndarray

NDArray Package for dendritic

6 stable releases

1.5.0 Nov 1, 2024
1.4.0 Nov 1, 2024
1.1.1 Oct 28, 2024

#10 in #dendritic

Download history 170/week @ 2024-10-25 544/week @ 2024-11-01 16/week @ 2024-11-08 22/week @ 2024-11-15 17/week @ 2024-11-22 26/week @ 2024-11-29 30/week @ 2024-12-06 15/week @ 2024-12-13

96 downloads per month
Used in 10 crates

MIT license

50KB
938 lines

Dendritic NDArray Crate

This crate is the numerical computing crate to work with N Dimensional values. The operations for this numerical computing library are broken down by aggregate, binary, scalar and unary operations. This crate serves as the base depedencies for most numerical computing for all the machine learning algorithms dendritic has to offer

Features

  • NDArray: General NDArray structure that can work with generic values.
  • Shape: Shape structure for representing dimension of N Dimensional value
  • Ops: Operations broken down into different categories supported by the NDArray module

Disclaimer

The dendritic project is a toy machine learning library built for learning and research purposes. It is not advised by the maintainer to use this library as a production ready machine learning library. This is a project that is still very much a work in progress.

Supported operation types

Currently the numerical operations are only supported for f64 types. This will change in future releases.

Binary Operations Example Usage

These are some examples of using the dendritic_ndarray create with some basic operations

use dendritic_ndarray::ndarray::NDArray;
use dendritic_ndarray::ops::*; 

fn main() {
    // Create 2 instance of ndarrays with a shape of (2,3) for testing binary operations
    let x: NDArray<f64> = NDArray::array(vec![2, 3], vec![0.0,0.0,1.0,1.0,2.0,2.0]).unwrap();
    let y: NDArray<f64> = NDArray::array(vec![2, 3], vec![0.0,0.0,1.0,1.0,2.0,2.0]).unwrap();
    
    // perform add operation
    let add_result : NDArray<f64> = x.add(y).unwrap();
    // save result to json file
    add_result.save("name_of_saved_ndarray").unwrap();
    // load result back to new ndarray
    let loaded = NDArray::load("name_of_saved_ndarray").unwrap();
}

Unary Operations Example Usage

These are some examples of using the dendritic_ndarray with the unary operations. Unary operations involve transoforming or modifying the contents of an ndarray and then returning the transformed result.

use dendritic_ndarray::ndarray::NDArray;
use dendritic_ndarray::ops::*; 

fn main() {
    // Create instance of ndarray, multiply by f64 scalar value
    let x: NDArray<f64> = NDArray::array(vec![2, 3], vec![0.0,0.0,1.0,1.0,2.0,2.0]).unwrap();
    
    // perform transpose operation
    let y : NDArray<f64> = x.transpose().unwrap(); // will return result with shape (3, 2)
}

Scalar Operations Example Usage

These are some examples of using the dendritic_ndarray with the scalar operations. Scalar operations involve an ndarray and a scalar value like an f64.

use dendritic_ndarray::ndarray::NDArray;
use dendritic_ndarray::ops::*; 

fn main() {
    // Create instance of ndarray, multiply by f64 scalar value
    let x: NDArray<f64> = NDArray::array(vec![2, 3], vec![0.0,0.0,1.0,1.0,2.0,2.0]).unwrap();
    let y: f64 = 10.0;
    
    // perform add operation
    let scalar_result : NDArray<f64> = x.scalar_add(y).unwrap();
}

Aggregate Operations Example Usage

These are some examples of using the dendritic_ndarray with the aggregate operations. Aggregate operations reduce the dimension or result of an operation on an ndarray. An example of this is statistical operations like taking the average or summing all values.

use dendritic_ndarray::ndarray::NDArray;
use dendritic_ndarray::ops::*; 

fn main() {
    // Create instance of ndarray, multiply by f64 scalar value
    let x: NDArray<f64> = NDArray::array(vec![2, 3], vec![0.0,0.0,1.0,1.0,2.0,2.0]).unwrap();
    
    // perform add operation
    let x_avg: f64 = x.avg();
}

Dependencies

~1.3–2.3MB
~48K SLoC