Format matrices and tensors to HTML, string, and LaTeX, with Jupyter integration.
Project description
MatRepr
Make every matrix beautiful.
MatRepr formats matrices and tensors to HTML, string, and LaTeX, with Jupyter integration. See Jupyter notebook for examples.
Brief examples:
from matrepr import mdisplay, mprint
mprint(A)
or to_str(A)
:
<1000×1000, 212345 'float64' elements, coo>
0 1 2 3 4 5 6 7
┌ ┐
0 │ 0.3876 ... │
1 │ 0.5801 0.5085 0.8927 0.629 ... │
2 │ ... │
3 │ 0.7142 ... │
4 │ 0.8631 ... │
5 │ 0.7863 0.1298 0.9918 0.71 0.3444 ... │
6 │ 0.9481 0.9609 ... │
7 │ 0.09361 0.1679 ... │
8 │ 0.4023 ... │
│ : : : : : : : : ... │
└ ┘
mdisplay(A)
or to_html(A)
:
Supports:
- SciPy - sparse matrices and arrays like
csr_matrix
andcoo_array
- NumPy -
ndarray
(demo) - PyTorch - dense and sparse
torch.Tensor
(demo) - TensorFlow -
tf.Tensor
andtf.SparseTensor
(demo) - Python-graphblas -
gb.Matrix
andgb.Vector
(demo) - PyData/Sparse -
COO
,DOK
,GCXS
(demo) list
,tuple
, including multi-dimensional and ragged
Features:
- Jupyter extension to format matrices in cell outputs.
- Configurable float precision or format string.
- Toggle row and column indices or set your own labels.
- Nested sub-matrices of any supported type, including mixing packages.
- Toggle matrix description or set your own title.
- String output can optionally autodetect terminal width.
- Methods to directly display a matrix (
mprint
,mdisplay
for Jupyter) - Methods to convert to string (
to_html
,to_latex
,to_str
). - Configurable per method call or set defaults with
matrepr.params
. - A
__repr__
monkey patch to format matrices in the Python shell. - Fast.
Install:
pip install matrepr
or
conda install matrepr
More Examples
HTML
mdisplay(A)
, to_html(A)
or simply A
with Jupyter extension %load_ext matrepr
LaTeX
mdisplay(A, 'latex')
, to_latex(A)
or simply A
with Jupyter extension %load_ext matrepr.latex
Jupyter Extension
MatRepr's Jupyter extension registers with Jupyter's formatter to format supported matrices with MatRepr. Simply:
%load_ext matrepr
Or if you prefer LaTeX:
%load_ext matrepr.latex
Example:
Methods
to_str(A)
: FormatA
as a text string.to_html(A)
: FormatA
as a plain or notebook-styled HTML table. Returns a string.to_latex(A)
: FormatA
as a LaTeX matrix. Returns a string.mprint(A)
: printA
as a string to stdout.mdisplay(A)
: Displays the output ofto_html
,to_latex
, orto_str
in Jupyter.
Note: For Spy plots see MatSpy.
Arguments
All methods take the same arguments. Apart from the matrix itself:
title
: string label. IfTrue
, then a matrix description is auto generated that contains matrix shape, number and type of nonzeros, etc.indices
: Whether to show matrix indices.max_rows
,max_rows
: size of table. Matrices larger than this are truncated with ellipses.precision
: floating-point precisionnum_after_dots
: How many rows/columns to show from the end of the matrix if the entire matrix does not fit.fill_value
: Value to fill empty cells.
Overriding defaults
matrepr.params
contains the default values for all arguments.
For example, to always disable the title, disable indices, and only show the top-left part of the matrix:
matrepr.params.title = False
matrepr.params.indices = False
matrepr.params.num_after_dots = 0
Interactive Python: Monkey Patching __repr__
The interactive Python REPL does not have a nice way to register a formatter.
We can monkey patch a __repl__
method into supported matrix classes for a similar effect.
This is implemented in the matrepr.patch module. Simply import the patch you want:
import matrepr.patch.scipy
import matrepr.patch.graphblas
import matrepr.patch.sparse
Example:
>>> a = scipy.sparse.random(4, 4, density=0.5)
>>> a
<4x4 sparse matrix of type '<class 'numpy.float64'>'
with 8 stored elements in COOrdinate format>
>>> import matrepr.patch.scipy
>>> a
<4×4, 8 'float64' elements, coo>
0 1 2 3
┌ ┐
0 │ 0.6536 0.008388 0.6564 │
1 │ │
2 │ 0.2987 0.8098 │
3 │ 0.1064 0.9613 0.7477 │
└ ┘
Edge Cases
MatRepr gracefully handles:
- multiple elements with the same coordinates (i.e. duplicates)
- nested matrices
- complex values
- string values (including multiline)
- LaTeX scientific notation as $
\times 10^{power}
$
See demo-edgecases notebook for more.
How does it work?
Each package that MatRepr supports implements two classes:
Driver
: Declares what types are supported and supplies an adapter.get_supported_types
: This declares what types are supported, as strings to avoid unnecessary imports.adapt(A)
: Returns aMatrixAdapter
for a matrix that this driver supports.
- Implement any of these
MatrixAdapter
classes:MatrixAdapterRow
: for structs able to efficiently read a selected row.MatrixAdapterCol
: for structs able to efficiently read a selected column.MatrixAdapterCoo
: for structs able to extract a portion of the matrix as tuples.
See matrepr.adapters module for details.
You may use matspy.register_driver
to register a Driver for your own matrix class.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file matrepr-1.0.1.tar.gz
.
File metadata
- Download URL: matrepr-1.0.1.tar.gz
- Upload date:
- Size: 36.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ceba61a1b0529b6229ddf4b5a0102a86e6b6e60d4306ed6a2fe5fa5459e8ffbf |
|
MD5 | e23d0246097547e1858aeaf34efe85ef |
|
BLAKE2b-256 | 24c6b0efa559db4768544f6b2b2306b7da17f06ebf031f325ca5cbdc7984accc |
File details
Details for the file matrepr-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: matrepr-1.0.1-py3-none-any.whl
- Upload date:
- Size: 40.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7a3fac5a8f2fa77b0de73fa4240faef11f381bab1174f9c057f6fec06662bd8 |
|
MD5 | f21fdcaaad909eff87b833307eb6af35 |
|
BLAKE2b-256 | 26bbb102182970f9bf8d78c32a2e32562e7f80ee4541365cb2630c79fbe8c3b0 |