PyArmadillo - linear algebra library for Python with MATLAB-like syntax - https://pyarma.sourceforge.io
APACHE-2.0 License
Copyright 2020-2021 Jason Rumengan (https://www.jasonrumengan.my.id) Copyright 2020-2021 Terry Yue Zhuo (https://terryyz.github.io) Copyright 2020-2021 Conrad Sanderson (https://conradsanderson.id.au) Copyright 2020-2021 Data61 / CSIRO
PyArmadillo is a streamlined linear algebra library (matrix maths) for the Python language, with emphasis on ease of use
Provides high-level syntax and functionality deliberately similar to Matlab
Provides classes for matrices and cubes; integer, floating point and complex elements are supported
Relies on Armadillo for the underlying C++ implementation of matrix objects
Authors:
Example program:
from pyarma import *
A = mat(4, 5, fill.ones)
B = mat(4, 5, fill.randu)
C = A*B.t()
C.print("C:")
Please cite the following paper if you use PyArmadillo in your research and/or software. Citations are useful for the continued development and maintenance of the library.
The documentation for PyArmadillo functions and classes is available at: https://pyarma.sourceforge.io/docs.html
The documentation is also in the doc/docs.html
file in the PyArmadillo archive,
which can be viewed with a web browser.
A short example program named example.py
that uses PyArmadillo
is included with the PyArmadillo archive.
A precompiled version of PyArmadillo is available via the Python Package Index (PyPI)
Use the following command for installation:
pip3 install --user pyarma
or
pip3 install pyarma
If pip3
cannot be found, try using the following alternatives:
python3 -m pip
py -m pip
To upgrade PyArmadillo via pip:
pip3 install --upgrade --user pyarma
or
pip3 install --upgrade pyarma
NOTE: It's possible that pip may erroneously not find the newest version.
In that case, try the following command:
pip3 install --no-cache-dir --upgrade --user pyarma
or
pip3 install --no-cache-dir --upgrade pyarma
More info on the pyarma package at PyPI: https://pypi.org/project/pyarma/
Preliminaries
Installing PyArmadillo from source requires:
Linux based operating systems (eg. Fedora, Ubuntu, CentOS, Red Hat, Debian, etc)
dnf config-manager --set-enabled powertools
pip3
needs to be updated:pip3 install --user --upgrade pip
macOS
xcode-select --install
pip3
needs to be updated:pip3 install --user --upgrade pip
Windows (x64)
pip3
needs to be updated:py -m pip install --user --upgrade pip
Running the Installer
Open a terminal window and change into the directory containing PyArmadillo sources
if the source was obtained as a package downloaded from SourceForge:
tar xf pyarmadillo-0.123.4.tar.xz
cd pyarmadillo-0.123.4
(change 0.123.4
to match the downloaded version)
if the source was obtained by cloning the GitLab repo:
git clone https://gitlab.com/jason-rumengan/pyarma/
cd pyarma
Execute the following command:
pip3 install --user .
NOTE: the full stop character at the end is important
To see the progress of installation, change the above command to pip3 install --verbose --user .
If pip3
cannot be found, try using the following alternatives:
python3 -m pip
py -m pip
Installation may take 5 to 20 minutes due to compiling C++ sources that extensively use template metaprogramming; the time taken depends on the number of CPU cores and the amount of available memory
Caveat: on systems with low memory (< 8 GB), parallel compilation may fail
due to template metaprogramming requiring large amounts of memory.
To avoid parallel compilation, first install scikit-build
using pip3 install --user scikit-build
and then install PyArmadillo using python setup.py install -- -- -j1
Link-time optimisation (LTO) is off by default.
LTO reduces the size of PyArmadillo at the expense of considerably longer compilation time.
To enable LTO, first install scikit-build
and ninja
,
and then enable the PYARMA_LTO
option during installation:
pip3 install --user scikit-build ninja
python3 setup.py install -DPYARMA_LTO=ON
Support for Intel MKL and Other BLAS/LAPACK Implementations
PyArmadillo can optionally use the Intel Math Kernel Library (MKL) as high-speed replacement for standard BLAS and LAPACK
Intel MKL should be automatically detected during installation from source
For other BLAS/LAPACK implementations, minor modifications to the built-in Armadillo sources may be required.
Specifically ext/armadillo/include/armadillo_bits/config.hpp
may need to be edited
to ensure Armadillo uses the same integer sizes and style of function names as used by the replacement libraries.
The following defines may need to be enabled or disabled:
ARMA_BLAS_CAPITALS
ARMA_BLAS_UNDERSCORE
ARMA_BLAS_LONG
ARMA_BLAS_LONG_LONG
See the Armadillo site for more information:
On Linux-based systems, MKL might be installed in a non-standard location such as /opt
which can cause problems during linking.
Before installing PyArmadillo, the system should know where the MKL libraries are located.
For example, /opt/intel/mkl/lib/intel64/
.
This can be achieved by setting the LD_LIBRARY_PATH
environment variable,
or for a more permanent solution, adding the directory locations to /etc/ld.so.conf
.
It may also be possible to store a text file with the locations in the /etc/ld.so.conf.d
directory.
For example, /etc/ld.so.conf.d/mkl.conf
.
If /etc/ld.so.conf
is modified or /etc/ld.so.conf.d/mkl.conf
is created,
/sbin/ldconfig
must be run afterwards.
Below is an example of /etc/ld.so.conf.d/mkl.conf
where Intel MKL is installed in /opt/intel
/opt/intel/lib/intel64
/opt/intel/mkl/lib/intel64
If MKL is installed and it is persistently giving problems during linking,
support for MKL can be disabled by editing ext/armadillo/CMakeLists.txt
and commenting out the line containing INCLUDE(ARMA_FindMKL)
,
then deleting ext/armadillo/CMakeCache.txt
,
and finally re-running PyArmadillo installation.
PyArmadillo is open source software licensed under the Apache License, Version 2.0 (the "License"). A copy of the License is included in the "LICENSE" file.
Any software that incorporates or distributes PyArmadillo in source or binary form must include, in the documentation and/or other materials provided with the software, a readable copy of the attribution notices present in the "NOTICE" file. See the License for details. The contents of the "NOTICE" file are for informational purposes only and do not modify the License.
If you find a bug in the library or the documentation, we are interested in hearing about it. Please make a small and self-contained program which exposes the bug, and then send the program source and the bug description to the developers.
The contact details are at: https://pyarma.sourceforge.io/contact.html
Further information about PyArmadillo is on the frequently asked questions page: https://pyarma.sourceforge.io/faq.html