Math library.
[generateme/fastmath "2.2.1"]
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.
[generateme/fastmath "2.2.1" :exclusions [com.github.haifengl/smile-mkl]]
{: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]
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
[...]
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==]
- 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
- 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)
- 2d (
Mat2x2
), 3d (Mat3x3
) and 4d (Mat4x4
) matrix types.
With typical basic matrix operations
- 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
- 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
- Collection of distributions (60+)
- 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
- 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 functions and confidence intervals
1d, 2d interpolations
Several easing functions (in, out, in-out)
- Wavelets: 1d, 2d (haar, biorthogonal, symlet, coiflet, daubechies, legendre)
- 1d Fast Sine, Cosine and Hadamard
Great collection (100+) of R^2->R^2 functions.
Gaussian Processes
Various clustering algorithms including K-Means++, DBSCAN, CLARANS, DENCLUE, MEC, Spectral, Deterministic Annealing
L-BFGS-B, Gradient, Nelder-Mead, Simplex, Powell, BOBYQA, CMAES, BayesianOptimizer
Hexagonal, squared, triangular, rhomboidal grid functions
Collection of various kernels (density, RBF, correlation)
- Signal (audio) processing filters and oscillators
- Smoothing filters: Savitzky-Golay, moving average, kernel smoothing
Floating point operations with error bounds
Plenty of constant values
Almost all functions optimized to work with double
and long
primitives
- 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
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 classes are compiled for java 1.8
If you see place of improvement, I'm accepting PRs.
- The Unlicence - up to 1.5.2
- MIT License - from 1.5.3
Copyright (c) 2023 generateme