fastmath
Math library.
Documentation
Clerk notebooks - WIP
Installation
[generateme/fastmath "2.2.1"]
MKL
Important Note
Fastmath relies on SMILE 2.6.0 which relies on BLAS/LAPACK via MKL and/or OpenBlas. MKL (preferred) and OpenBlas are included as dependencies in fastmath
. This leads to addional 1GB of jar files. I can't assure that all functionalities will work on OpenBlas (see: #15) but 99% should. If you need fastmath
to be lighter, please exclude MKL from your path.
lein / project.clj
[generateme/fastmath "2.2.1" :exclusions [com.github.haifengl/smile-mkl]]
deps.edn
{:deps {generateme/fastmath {:mvn/version "2.2.1"
:exclusions [com.github.haifengl/smile-mkl]}}}
If you don't need certain interpolation or clustering methods you can exclude OpenBlas as well (be warned that other things can break):
:exclusions [com.github.haifengl/smile-mkl org.bytedeco/openblas]
MKL Exception
When MKL is not available fastmath
(SMILE actually, here and here) will throw two exceptions with full stack traces about lack of MKL. You can safely ignore them.
[main] DEBUG smile.math.blas.LAPACK - Failed to create MKL instance:
java.lang.ClassNotFoundException: smile.math.blas.mkl.MKL
[...]
[main] DEBUG smile.math.blas.BLAS - Failed to create MKL instance:
java.lang.ClassNotFoundException: smile.math.blas.mkl.MKL
[...]
Content
PrimitiveMath
Code adopted from Zach Tellmans' library.
[* + - / > < >= <= == rem quot mod bit-or bit-and bit-xor bit-not bit-shift-left bit-shift-right unsigned-bit-shift-right inc dec zero? neg? pos? min max even? odd? bool-and bool-or bool-xor bool-not << >> >>> not==]
Math functions
- Trigonometric functions
- Power: log, ln, logb, exp, pow, sqrt
- Rounding functions: round, floor, ceil, trunc, frac, approx + other
- Normalizations: norm wrap, constrain
- Interpolations: lerp, cos-interpolation, smooth-interpolation, quad-interpolation, smoothstep
- Special functions: erf, beta, gamma + other
- Distance: dist, hypot
- Sign: sgn, signum, abs
- Other: gcd, lcm
Most of them backed by Jafama FastMath 2.3.1 or Apache Commons Math 3.6.1
Vector operations protocol and implementations
- 2d (
Vec2
), 3d (Vec3
) and 4d (Vec4
) vector types. - ArrayVector for fixed length long vectors (fixed sized double-array)
- Clojure vector, double array, Number (as 1d vector)
Matrix operations protocol and implementations
- 2d (
Mat2x2
), 3d (Mat3x3
) and 4d (Mat4x4
) matrix types.
With typical basic matrix operations
Complex number functions
- primitive operations: mult, div, add, sub
- abs, arg, conjugate, reciprocal, neg
- atan, asin, acos, csc, sec, tanh, tan, sinh, sin, cosh, cos
- log, exp, pow
- sqrt, sq, sqrt1z
Random numbers
- Collection of random number generators
- Random generator functions for each primitive type (drand - double, lrand - long, frand - float, irand - int)
- Additional RNG functions: brand - true/false, grand - gaussian distributed double
- Random sequences: from distribution, halton, sobol, R2, sphere, uniform
Distributions
- Collection of distributions (60+)
Noise
- 4 noise types: value, gradient, simplex, discrete
- 3 noise blends: fbm, ridgedmulti, billow
- Ready to use fbm functions: noise (perlin), vnoise (value noise), simplex
- Warp noise
Statistics
- Descriptive statistics: size, min, max, mode, mean, median, percentiles, kurtosis, skewness, IQR, LAV, UAV and other
- Correlations
- t-test
- ACF/PACF
- histogram
- Bootstrap
- Confidence intervals
Bootstrap
Bootstrap functions and confidence intervals
Interpolations
1d, 2d interpolations
Easings
Several easing functions (in, out, in-out)
Transforms
- Wavelets: 1d, 2d (haar, biorthogonal, symlet, coiflet, daubechies, legendre)
- 1d Fast Sine, Cosine and Hadamard
Vector fields
Great collection (100+) of R^2->R^2 functions.
Gaussian Processes
Gaussian Processes
Clustering
Various clustering algorithms including K-Means++, DBSCAN, CLARANS, DENCLUE, MEC, Spectral, Deterministic Annealing
Optimization
L-BFGS-B, Gradient, Nelder-Mead, Simplex, Powell, BOBYQA, CMAES, BayesianOptimizer
Grids
Hexagonal, squared, triangular, rhomboidal grid functions
Kernels
Collection of various kernels (density, RBF, correlation)
Signal
- Signal (audio) processing filters and oscillators
- Smoothing filters: Savitzky-Golay, moving average, kernel smoothing
EFloat
Floating point operations with error bounds
Other
Plenty of constant values
Almost all functions optimized to work with double
and long
primitives
Supporting libraries
- Apache Commons Math 3.6.1 - Apache 2.0 Licence
- SMILE 2.5.0 - Apache 2.0 Licence
- Jafama FastMath 2.3.1 - Apache 2.0 Licence
- PrimitiveMath - MIT Licence
- JWave - MIT Licence
- SSJ - Apache 2.0 Licence
Alternatives
Since this library is only JVM version, you can check following Clojure/ClojureScript libraries as replacement
- PrimitiveMath - for primitive operators
- Kixi stats - for pure clj(s) statistics/distributions (tends to be 2-10x slower)
- thi.ng - for vectors, general math, noise, complex numbers, transforms (fourier)
- vectorz-clj - fast vector operations
- Incanter - statistics/distributions/probability
Java
Java classes are compiled for java 1.8
How To Help
If you see place of improvement, I'm accepting PRs.
Licence
- The Unlicence - up to 1.5.2
- MIT License - from 1.5.3
Copyright (c) 2023 generateme