GitHub - mlcpp/Matrix: Easy-to-use Scientific Computing library in/for C++ available for Linux and Windows. (original) (raw)

Matrix

Join the chat at https://gitter.im/mlcpp/Matrix

Table of Contents

  1. Installation
  2. Development
    2.1. Linux
    2.2. Windows
  3. Benchmarking
  4. Testing
  5. Quick Start Guide
    5.1. Initializers
    5.2. Slicing
    5.3. Printing/Viewing
    5.4. Indexing
    5.5. Operators
    5.6. Broadcasting
    5.7. Minimum, Maximum
    5.8. Mathematical Operations
    5.9. Statistical Operations
    5.10. Matrix Algebra
    5.11. Miscellaneous

Installation

This describes the installation process using cmake. As pre-requisites, you'll need git and cmake installed.

Check out the library.

$ git clone https://github.com/mlcpp/Matrix.git && cd Matrix

Make a build directory to place the build output.

$ cmake -E make_directory "build"

Generate build system files with cmake.

$ cmake -E chdir "build" cmake -DCMAKE_BUILD_TYPE=Release ../

Build the library.

$ cmake -DCMAKE_BUILD_TYPE=Release -S . -B "build"

On a unix system, the build directory should now look something like this:

/Matrix
  /build
    /examples
      /abs
      /addition
      ...

Development

Linux

Prerequisites

  1. C++ compiler (gcc or clang)
  2. git
  3. clang-format
  4. make (for Makefiles)
  5. cmake (version 3.13 or higher)

Check out the library.

$ git clone https://github.com/mlcpp/Matrix.git && cd Matrix

Create build directory.

$ mkdir build

Enter into build directory.

$ cd build

Run CMake. This step will generate a Makefile in the build/ folder.

$ cmake ../

Compile all files and place the binaries inside build/examples/ folder.

$ make

Compile single file and place the binary inside build/examples/ folder.

$ make

Windows

Prerequisites

  1. C++ compiler (mingw-gcc)
  2. git (msysgit)
  3. clang-format
  4. mingw-make or mingw32-make (for Makefiles)
  5. cmake (version 3.13 or higher)

Add these tools to PATH.

Note: Run the following commands in msysgit terminal.

Check out the library.

$ git clone https://github.com/mlcpp/Matrix.git && cd Matrix

Create build directory.

$ mkdir build

Enter into build directory.

$ cd build

Run CMake. This step will generate a Makefile in the build/ folder.

$ cmake ../

Compile all files and place the binaries inside build/examples/ folder.

$ mingw-make # use mingw32-make if using 32-bit Windows

Compile single file and place the binary inside build/examples/ folder.

$ mingw-make # use mingw32-make if using 32-bit Windows

Benchmarking

To compile g_benchmark binaries:

Linux: make benchmarks

Windows: mingw32-make benchmarks

Testing

To compile g_test binaries:

Linux: make tests

Windows: mingw32-make tests

Quick Start Guide

This guide contains detailed explanation of all the methods and functions available and how to use them.

More detailed information about how to use these methods and functions is available in /examples.

Note: Here d-type means any C++ data type.

Initializers

Many initializer functions are provided that return Matrix object.

Function Parameters Return value Description
matrix.init() _1 Parameter:_Type: d-type/std::vector/std::vector<std::vector>/std::vector<std::vectorstd::string>Job: value(s) of elements in the Matrix object Matrix object Creates a Matrix object of same dimensions and values as provided in the parameter.
matrix.eye() _1 Parameter:_Type: intJob: Size of the identity matrix Matrix object Creates an identity Matrix object of the size given as parameters.
matrix.zeros() _2 Parameters:_Type: int; intJob: Number of rows; Number of columns Matrix object Creates a Matrix object of all elements 0 of the size given as parameters.
matrix.ones() _2 Parameters:_Type: int; intJob: Number of rows; Number of columns Matrix object Creates a Matrix object of all elements 1 of the size given as parameters.
matrix.genfromtxt() _2 Parameters:_Type: std::string;charJob: Path of the .csv file Matrix object Creates a Matrix object with data elements as in the given file.

Slicing

Matrix objects can be sliced like NumPy arrays.

Function Parameters Return value Description
Matrix.slice() _4 Parameter:_Type: int; int; int; intJob: Starting row index; Ending row index; Starting column index; Ending column index Matrix object Slices the Matrix object according to the indices provided.
Matrix.slice_select() _4 Parameter:_Type: Matrix; Matrix; d-type2; intJob: Matrix to select values on; Matrix to select values from; value to select; column index on which to select Matrix object Slices the Matrix object to get all rows which have value(3rd parameter) in second Matrix object and one column(4th parameter)

Printing/Viewing

A number of methods are provided to print/view a Matrix object in different ways.

Function Parameters Return value Description
Matrix.print() 0 Parameters void Prints the whole Matrix object onto the console.
Matrix.head() 0 Parameters void Prints first 5 rows of the Matrix object onto the console.
Matrix.tail() 0 Parameters void Prints first 5 rows of the Matrix object onto the console.
Matrix.view() _2 Parameters:_Type: int; intJob: row index; column index void Prints the value on the provided index.
Matrix.view() _4 Parameters:_Type: int; int; int; intob: Starting row index; Ending row index; Starting column index; Ending column index void Prints the Matrix object according to the indices provided.

Indexing

Indexing can be used to get or assign value to a particular element.

For example, let there is a Matrix object named mat. If we want to get the value at index (5,3) we can do this as follows:

Similarly, if we want to assign the value to index (5,3) we can do this by:

Operators

Support for almost all standard C++ operators is provided. This includes:

Broadcasting

Broadcasting is in-built in the Basic Mathematical operations i.e., addition, subtraction, multiplication and division.

Following binary operations are possible:

where, @ is any operator from (+, -, *, /)

Note: Vector is a Matrix object where row length or column length is equal to 1.

Following unary operations are possible:

where, @ is any operator from (-)

Minimum, Maximum

Function Parameters Return value Description
matrix.min() _2 Parameters:_Type: Matrix; std::stringJob: Matrix to find minimum; dimension across which to find minimum Matrix object Method to get the minimum value along an axis
matrix.max() _2 Parameters:_Type: Matrix; std::stringJob: Matrix to find maximum; dimension across which to find maximum Matrix object Method to get the maximum value along an axis
matrix.argmin() _2 Parameters:_Type: Matrix; std::stringJob: Matrix to find index of minimum; dimension across which to find index of minimum Matrix object Method to get the index of minimum value along an axis
matrix.argmax() _2 Parameters:_Type: Matrix; std::stringJob: Matrix to find index of maximum; dimension across which to find index of maximum Matrix object Method to get the index of maximum value along an axis

Mathematical Operations

Function Parameters Return value Description
matrix.sqrt() _1 Parameter:_Type: MatrixJob: Matrix object to apply method on Matrix object Method to get the sqrt of each element of aMatrix object
matrix.power() _2 Parameters:_Type: Matrix; doubleJob: Matrix object to apply method on; power of Matrix elements Matrix object Method to calculate power of each element of a Matrix object
matrix.power() _2 Parameters:_Type: Matrix; MatrixJob: Matrix object to apply method on; power of Matrix elements Matrix object Method to calculate power of each element of a Matrix object
matrix.exp() _1 Parameter:_Type: MatrixJob: Matrix object to apply method on Matrix object Method to calculate exponential of all elements in the Matrix object
matrix.log() _1 Parameter:_Type: MatrixJob: Matrix object to apply method on Matrix object Method to calculate natural logarithm of all elements in the in the Matrix object
matrix.abs() _1 Parameter:_Type: MatrixJob: Matrix object to apply method on Matrix object Method to get absolute value of all elements in the in the Matrix object

Note: Broadcasting in power() methods works in the same way as in Basic Mathematical operations.

Statistical Operations

Function Parameters Return value Description
matrix.sum() _2 Parameters:_Type: Matrix; std::stringJob: Matrix object to apply method on; Dimension on which to calculate sum Matrix object Method to calculate the sum over an axis of aMatrix object
matrix.mean() _2 Parameters:_Type: Matrix; std::stringJob: Matrix object to apply method on; Dimension on which to calculate mean Matrix object Method to calculate the mean over an axis of a Matrix object
matrix.std() _2 Parameters:_Type: Matrix; std::stringJob: Matrix object to apply method on; Dimension on which to calculate standard deviation Matrix object Method to calculate the standard deviation over an axis of a Matrix object

Matrix Algebra

Function Parameters Return value Description
Matrix.transpose() 0 Parameters Matrix object Method to return the Tranpose of aMatrix object
matrix.matmul() _2 Parameters:_Type: Matrix; MatrixJob: First Matrix for matrix multiplication; Second Matrix for matrix multiplication Matrix object Method to calculate matrix multiplication
matrix.determinant() _2 Parameters:_Type: Matrix; intJob: Matrix object to calculate determinant of; Size of the Matrix object double Method to calculate the Determinant of a Matrix object
matrix.inverse() _1 Parameter:_Type: MatrixJob: Matrix object to calculate inverse of Matrix object Method to calculate the Inverse of a Matrix object

Miscellaneous

Function Parameters Return value Description
matrix.concatenate() _3 Parameters:_Type: Matrix; Matrix; std::stringJob: Matrix to concatenate on; Matrix which is to be concatenated; Dimension on which to concatenate Matrix object Method to concatenate/join two Matrix objects
Matrix.get() 0 Parameters std::vector<std::vector> Method to get the Matrix object as a 2D vector
Matrix.get_row() _1 Parameter:_Type: intJob: row index std::vector Method to get a row of a Matrix object in the form of a vector
Matrix.get_col() _1 Parameter:_Type: intJob: column index std::vector Method to get a column of a Matrix object in the form of a vector
matrix.delete_() _3 Parameters:_Type: Matrix; int; std::stringJob: Matrix to delete row/column of; index to be deleted; Dimension on which to delete Matrix object Method to delete a row or column of a Matrix object
matrix.reciprocal() _1 Parameter:_Type: MatrixJob: Matrix object to apply method on Matrix object Method to calculate reciprocal of all elements in the Matrix object
Matrix.row_length() 0 Parameters int Method to get the number of rows in a Matrix object
Matrix.col_length() 0 Parameters int Method to get the number of columns in a Matrix object