fastmath
Fast and primitive based math library.
Installation
[generateme/fastmath "1.5.0-alpha1"]
Documentation
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
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)
With following groups of functions:
- Basic linear operations: add, mult, div, sub, dot, cross, hadamard product
- mag, magsq, heading, angle-between, limit, normalize
- rotations (2d,3d)
- translations (2d, 3d)
- various distances
- centroid, interpolations
- and other
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
- Collection of distributions
- 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
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
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
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.
Clustering
SMILE bindings for clustering
Classifcations
SMILE, LIBLINEAR classification bindings
Regression
- SMILE regression bindings
- extended Gaussian Processes
Optimization
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
Other
Plenty of constant values
Almost all functions optimized to work on double
and long
primitives
Supporting libraries
- Apache Commons Math 3.6.1 - Apache 2.0 Licence
- SMILE 1.5.1 - 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