Git Product home page Git Product logo

matrijs's Introduction

Matrijs ๐Ÿ”ข

A small 2D f64 matrix library.

There are many like it, but this one is mine.

Note: The example below can be found in examples/basic.rs.

// The matrix! macro allows for quick initialization.

// m = | 0.0  1.0 |
//     |-1.0  0.0 |
let mut m = matrix![0.0, 1.0; -1.0, 0.0];

// Scalar math.
m += 1.0;
m *= -10.0;

// You can also create a Matrix manually.
let m_expected = Matrix::new(2, 2, &[-10.0, -20.0, 0.0, -10.0]);
assert_eq!(m, m_expected);

// a = | 0.0  1.0 |
//     | 2.0  3.0 |
// b = | 4.0  5.0  6.0 |
//     | 7.0  8.0  9.0 |
let a = matrix![0.0, 1.0; 2.0, 3.0];
let b = matrix![4.0, 5.0, 6.0; 7.0, 8.0, 9.0];

// The dot product of `i` and `a` should be equal to `a` (idempotence).
let i = Matrix::identity(2);
assert_eq!(i.dot(&a), a);

assert_eq!(a.dot(&b), matrix![7.0, 8.0, 9.0; 29.0, 34.0, 39.0]);

// You can append rows and columns to expand what you're working with.
let mut ones = Matrix::one(2, 2);
ones.append_row(matrix![0.0, 0.0].array());

assert_eq!(
    ones,
    matrix![
        1.0, 1.0;
        1.0, 1.0;
        0.0, 0.0
    ]
);

// When in doubt, take a look at the shape of the matrix.
assert_eq!(ones.shape(), (3, 2)) // 3 rows, 2 columns

Features

  • Creation
    • From array: Matrix::new(3, 2, &[0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
    • With value: Matrix::with_value(3, 16.1)
    • Zeros: Matrix::zero(3)
    • Ones: Matrix::one(3)
    • Identity: Matrix::identity(3)
    • Diagonal: Matrix::diagonal(&[1.0, 3.0, 1.0, 2.0])
  • Operations
    • Transpose
      • In place: m.transpose();
      • By value: m.t()
    • Scalar operations
      • Addition, subtraction, multiplication, division:

        b = a + 1.0, b *= 2

    • Matrix-matrix operations
      • Entry-by-entry addition, subtraction, multiplication, division:

        a + b

      • Dot product: a.dot(&b)

Implementation

The internal data structure is a Vec of entries, row after row. That means that this is a row-major implementation.

Name

In Dutch, there is a word matrijs (pronounce mat-rice) which has a common ancestor with the word matrix. Matrijs refers to molds or stamps, often when laid out in arrays.

I like the name for this library, because it contains the 'ij' digraph, which is very similar to the letters i and j as seen in notation for entries in a matrix, such as aij.

matrijs's People

Contributors

ma3ke avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.