Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
This JavaScript module contains a Matrix class that will help you work with mathematical matrices.
The module is created in the CommonJS format, exporting using module.exports, meaning you need a CommonJS require system to use it. It is published in npm, so including it in node.js is simple:
Install it in the command line:
npm install matrixmath
Then include the module in your code:
var Matrix = require('matrixmath/Matrix');
Constructor
Instance properties
Static methods
Instance methods
Create a new Matrix instance by using the constructor:
var matrix = new Matrix();
var matrix = new Matrix(3, 3);
> console.log(matrix.toLogString());
[
1 0 0
0 1 0
0 0 1
]
var matrix = new Matrix(3, 3, false);
> console.log(matrix.toLogString());
[
undefined undefined undefined
undefined undefined undefined
undefined undefined undefined
]
The rows property contains the number of rows in the matrix.
> console.log(matrix.rows);
3
The cols property contains the number of columns in the matrix.
> console.log(matrix.cols);
3
The length property contains the number of values in the matrix.
> console.log(matrix.length);
9
The following methods will return a new Matrix instance.
Creates a new matrix with the sum of the passed in matrices. All matrices must have the same size. If a matrix is found that is not the same size, it is skipped.
var matrix = Matrix.add(matrix1, matrix2);
Creates a new matrix with the difference of the passed in matrices. All matrices must have the same size. If a matrix is found that is not the same size, it is skipped.
var matrix = Matrix.subtract(matrix1, matrix2);
Creates a new matrix with the product of the passed in matrices. All matrices must either be square and of the same size, or the next matrix in line must have the same number of rows as the number of columns in the previous result.
The first argument must be a matrix instance, but the rest can be either matrices or numbers. If a number is seen, a scalar multiplication is made.
var matrix = Matrix.multiply(matrix1, matrix2);
// or
var matrix = Matrix.multiply(matrix1, 3);
Creates a new matrix with the quotient of the passed in matrices. All matrices must be square and of the same size.
var matrix = Matrix.divide(matrix1, matrix2);
The following methods are available on all Matrix instances.
Set the data in the matrix to the identity matrix.
var matrix = new Matrix(3, 3, false).setIdentityData();
> console.log(matrix.toLogString());
[
1 0 0
0 1 0
0 0 1
]
Set the data in the matrix to be only zeros.
var matrix = new Matrix(3, 3, false).setEmptyData();
> console.log(matrix.toLogString());
[
0 0 0
0 0 0
0 0 0
]
Set the data in the matrix to the passed in data.
var matrix = new Matrix(3, 3);
matrix.setData([1, 2, 3, 4], 2, 2);
> console.log(matrix.toLogString());
[
1 2
3 4
]
var matrix = new Matrix(3, 3);
matrix.setData([1, 2, 3, 4, 5, 6, 7, 8, 9]);
> console.log(matrix.toLogString());
[
1 2 3
4 5 6
7 8 9
]
var matrix = new Matrix(3, 3);
matrix.setData(1, 2, 3, 4, 5, 6, 7, 8, 9);
> console.log(matrix.toLogString());
[
1 2 3
4 5 6
7 8 9
]
Get the data in the matrix as an array with extra data.
var matrix = new Matrix(2, 2);
> console.log(matrix.getData());
[1, 0, 0, 1]
> console.log(matrix.getData().rows);
2
> console.log(matrix.getData().cols);
2
Get the data in the matrix as an array.
var matrix = new Matrix(2, 2);
> console.log(matrix.toArray());
[1, 0, 0, 1]
Get the data for this matrix as a formatted string, which is useful for logging and debugging. It will be formatted with line breaks to visualize the rows and columns.
var matrix = new Matrix(3, 3);
> console.log(matrix.toLogString());
[
1 0 0
0 1 0
0 0 1
]
> console.log(matrix.toLogString(5));
[
1 0 0
0 1 0
0 0 1
]
> console.log(matrix.toLogString(' ', ' | '));
[
1 | 0 | 0
0 | 1 | 0
0 | 0 | 1
]
> console.log(matrix.toLogString(0, ' | ', '-- start --', '-- end --'));
-- start --
1 | 0 | 0
0 | 1 | 0
0 | 0 | 1
-- end --
Copies the data from another matrix into the original matrix.
var matrix = new Matrix(2, 2);
var matrix1 = new Matrix(2, 2, false).setData(1, 2, 3, 4);
matrix.copy(matrix1);
> console.log(matrix.toLogString());
[
1 2
3 4
]
Returns a new matrix with the same content as the first one.
var matrix = new Matrix(2, 2);
var matrix1 = matrix.clone();
Adds all the matrices into the original matrix. All matrices must have the same size as the original one. If a matrix is found that is not the same size, it is skipped.
var matrix = new Matrix(1, 3).setData(1, 2, 3);
var matrix1 = new Matrix(1, 3).setData(2, 4, 6);
matrix.add(matrix1);
> console.log(matrix.toLogString());
[
3 6 9
]
Subtracts all the matrices from the original matrix. All matrices must have the same size as the original one. If a matrix is found that is not the same size, it is skipped.
var matrix = new Matrix(1, 3).setData(1, 2, 3);
var matrix1 = new Matrix(1, 3).setData(2, 4, 6);
matrix.subtract(matrix1);
> console.log(matrix.toLogString());
[
-2 -2 -3
]
Multiplies all the matrices into the original matrix. All matrices must either be square and of the same size, or the next matrix in line must have the same number of rows as the number of columns in the previous result.
The arguments can be either matrices or numbers. If a number is seen, a scalar multiplication is made.
var matrix = new Matrix(2, 2).setData(1, 2, 3, 4);
var matrix1 = new Matrix(2, 2).setData(2, 4, 6, 8);
matrix.multiply(matrix1);
> console.log(matrix.toLogString());
[
14 20
30 44
]
var matrix = new Matrix(2, 2).setData(1, 2, 3, 4);
matrix.multiply(3);
> console.log(matrix.toLogString());
[
3 6
9 12
]
Divides all the matrices from the original matrix. All matrices must be square and of the same size as the original matrix.
var matrix = new Matrix(2, 2).setData(1, 0, 0, 1);
var matrix1 = new Matrix(2, 2).setData(2, 0, 0, 2);
matrix.divide(matrix1);
> console.log(matrix.toLogString());
[
0.5 0
0 -0.5
]
Raises the matrix to the the given power.
var matrix = new Matrix(2, 2).setData(1, 2, 4, 1);
matrix.power(3);
> console.log(matrix.toLogString());
[
25 22
44 25
]
Transposes the matrix.
var matrix = new Matrix(2, 2).setData(1, 2, 4, 1);
matrix.transpose();
> console.log(matrix.toLogString());
[
1 4
2 1
]
Inverts the matrix.
var matrix = new Matrix(3, 3).setData(
3, 0, 2,
2, 0, -2,
0, 1, 1
);
matrix.invert();
> console.log(matrix.toLogString());
[
0.2 0.2 0
-0.2 0.3 1
0.2 -0.3 0
]
Gets the determinant of the matrix. The matrix must be square for this to be possible. If it's not square, this will return null
.
var matrix = new Matrix(2, 2).setData(4, 6, 3, 8);
var determinant = matrix.getDeterminant();
> console.log(determinant);
14
Tests if the matrix has the same content as another matrix. Returns true
if it has, false
otherwise.
var matrix = new Matrix(3, 2).setData(3, 0, 2, 0, 0, 1);
var matrix1 = new Matrix(3, 2).setData(3, 0, 2, 0, 0, 1);
var matrix2 = new Matrix(2, 2).setData(3, 0, 2, 0);
matrix.equals(matrix1); // true
matrix.equals(matrix2); // false
Tests if the data of the matrix represents the identity matrix. Returns true
if it is, false
otherwise.
var matrix = new Matrix(3, 3);
var matrix1 = new Matrix(3, 3, false).setData(1, 0, 0, 0, 1, 0, 0, 0, 1);
var matrix2 = new Matrix(3, 3, false).setData(1, 2, 3, 4, 5, 6, 7, 8, 9);
matrix.isIdentity(); // true
matrix1.isIdentity(); // true
matrix2.isIdentity(); // false
This module is versioned according to Semantic Versioning (uses the format major.minor.patch). If there is a breaking change, the major part of the version number will be updated.
The Matrix class is fully unit tested. It uses mocha and expect.js. Just run the tests from the command line:
npm run test
The project is licensed under the MIT license.
Copyright (c) 2014 Johannes Koggdal
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
FAQs
Library for working with mathematical matrices.
We found that matrixmath demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.