A Python library that allows you to make algebraic operations with 1D and 2D arrays

Clear and complete documentation and tests. This ReadMe doesn't include the full list of functions of the library.

## Description

• Work with vectors and matrixes in an easy way.
• Sum, Subtract and Multiply between different size matrixes.
• Get the `inverse`, `transpose`, `adjugate`, `cofactor` and `row reduced` matrix in a simple line of code.
• Get the determinant and the range of a matrix.
• Little more than 11kb.
• No dependencies.

## Usage

Create and print a Matrix

``````>>> import matrix

# Create instance
>>> x = Matrix([1, 2, 3])
>>> y = Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])

# Print instance
>>> print(x.matrix)
[[1, 2, 3]]
>>> print(y.matrix)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
``````

### Sum

Now let's sum another matrix to the instance using the `sum()` method:

``````>>> y = x.sum([3, 2, 1])
# [1, 2, 3] + [3, 2, 1] = [4, 4, 4]

>>> print(y.matrix)
[[4, 4, 4]]
``````

### Subtract

Now let's subtract another matrix to the instance using the `minus()` method:

``````>>> y = x.sum([3, 2, 1])
# [1, 2, 3] - [3, 2, 1] = [-2, 0, 2]

>>> print(y.matrix)
[[-2, 0, 2]]
``````

### Multiply

Example of how to multiply matrixes using the `multiply()` method. Remember that some multiply operations between matrixes are incompatible because of their sizes.

``````>>> x = Matrix([1, 2, 3])
>>> z = x.multiply([, , ])
# [1, 2, 3] *  = 
#             
#             

>>> print(z.matrix)
[]
``````

## Transpose a matrix

Image from Cuemath

Call the `transpose()` method.

``````>>> x = Matrix([1, 2, 3])
>>> z = x.transpose()

>>> print(z.matrix)
[, , ]
``````

## Inverse of a matrix

Call the `inverse()` method. Example for regular matrix:

``````>>> x = Matrix([[1, 2, 3], [3, 2, 1], [1, 0, 3]])
>>> z = x.inverse()

>>> print(z.matrix)
[[-0.375, 0.375, 0.25], [0.5, -0.0, -0.5], [0.125, -0.125, 0.25]]
``````

Example for singular matrix:

``````>>> x = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> z = x.inverse()

>>> print(z.matrix)
[[nan, nan, nan], [nan, nan, nan], [nan, nan, nan]]
# Means that matrix is singular (no inversible)
``````

## Cofactor matrix

Call the `cofactor()` method

``````>>> x = Matrix([[1, 2, 3], [3, 2, 1], [1, 0, 3]])

>>> print(z.matrix)
[[6, -8, -2], [-6, 0, 2], [-4, 8, -4]]
``````

Call the `adjugate()` method

``````>>> x = Matrix([[1, 2, 3], [3, 2, 1], [1, 0, 3]])

>>> print(z.matrix)
[[6, -6, -4], [-8, 0, 8], [-2, 2, -4]]
``````

## Row reduction

Row reduction (or Gaussian elimination) is the process of using row operations to reduce a matrix to row reduced echelon form. This procedure is used to solve systems of linear equations, invert matrices, compute determinants, and do many other things.

Call the `row_reduction()` method to reduce a matrix:

``````>>> x = Matrix([[1, 2, 3], [3, 2, 1], [1, 0, 3]])
>>> z = x.row_reduction()

>>> print(z.matrix)
[[1.0, 0.0, 0.0], [-0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]
``````

## Can I contribute?

Of course you can! Contributers are necessary for mantaining and improve the library. If you want to contribute, do not hesitate to make a pull request. If you need some information on how to contribute on a Github project, this reading  might be useful.