All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
- Power divergence tests can work on histograms / distribution
dissimilarity
andsimilarity
distance function of PDF (stats)
SMILE
downgraded to 2.6.0 due to licence issue (3.0.2 is GPL, 2.6.0 is LGPL)- [breaking]
correlation-matrix
can use only correlation methods (:pearson
,:kendall
and:spearman
) - some SMILE based methods are rewritten to Java or Clojure
kullback-leibler-divergence
andjensen-shannon-divergence
, usedissimilarity
function instead.
- stats distances type inconsistency on some cases
- Apache Commons Math
RealMatrix
and double[][] matrix interfaces vec->array
converts any vector to double array- Rotation matrix, quaternions, vectors consistency
SMILE
deps updated
mat->float-array2d
,mat->array
,mat->float-array
- row-wise matrix representations as arraysdebug?
option for:lbfgsb
optimizerrint
accepts scale argument (same asfloor
andceil
)roll-a-dice
to simulate dice rollingdouble-exponent
,double-significand
andulp
functionsfastmath.solver/quadratic
solver of quadratic equation ax^2+bx+c=0fastmath.quaternion
namespace- Cholesky decomposition for fixed size matrices
- Eigenvectors and eigenvalues for matrices
negative-zero?
tests for-0.0
valuelinear-optimizer
- linear optimizationmat
,rows->mat
andcols->mat
- additional matrix creatorsnorm
- various matrix norms (0, 1, Inf, max, generalized L_pq, Shatten p-norm, Frobenius)condition
- condition number of the matrixsmooth-maximum
- boltzmann operator, lse, smu, p-norm, mellowmaxfastmath.calculus
- integration (VEGAS+ MC, h-adaptive Cubature and Gauss-Kronrod, ACM wrappers) and differentiations: derivative, gradient and hessian + Richardson extrapolation
fastmath.complex
reimplemented
matrix
object name in printing, indentation- speed of element matrix accessing is improved
- eastwood boxed math and reflection warnings (removed problematic macros, shadowing global vars, etc.)
- ensuring working with Clojure 1.10.3
- problem with field methods propagation in uberjar #25, thanks @pfeodrippe
:lbfgsb
java implementation of L-BFGS-B optimization algorithm, use it instead of:bfgs
(buggy SMILE implementation)
2.1.9-SNAPSHOT
renamed to be 2.2.0
- see changes below
fma
- fused multiply and add(+ (* x y) z)
(for java 9+)fastmath.efloat
- floating point operations with error boundsproject
- vector projection- Apache Commons Math
ArrayRealVector
extended withVectorProto
fastmath.matrix
- matrix 2x2, 3x3 and 4x4 basic operations (unrolled)- fields refactored
binomial-ci
- confidence interval methods for binomial distribution- new distributions (based on R package
gamlss.dist
)::zaga
- zero adjusted gamma distribution:nbi
- negative binomial type I:zinbi
- zero inflated negative binomial type I:zanbi
- zero altered negative binomial type I:zip
- poisson zero inflated:zip2
- zero inflated poisson 2:exgaus
- ex-Gaussian, exponentially modified gaussian:zabi
- zero adjusted binomial:zibi
- binomial zero inflated:bb
- beta binomial:zabb
- zero adjusted beta binomial:zibb
- zero inflated beta binomial
- other distributions
:kolmogorov
- Kolmogorov distribution:half-normal
- half-normal distribution:truncated
and:mixture
distributions:multinomial
distribution
hpdi-extent
andpi-extent
- new extents based on HPDI and PI fromrethinking
R packagedistribution-parameters
accept a keyword additionallyfastmath.solver/find-root
- root solver for univariate functionsdelta-eq
anddelta=
for checking eqality with given accuracy.coefficient-matrix
andcorrelation-matrix
- grid functions accept separate coordinates
- many additional
log-exp
functions - weighted mean (
wmean
), median (wmedian
) and quantiles (wquantile
,wquantiles
) - Vec2/3/4 implement IReduce and IReduceInit
- historical trigonometric functions (versine with variants, chord, exsec/excsc) with their inverses
- Clerk notebook for: fastmath.core
- Added PDF to
:cramer-von-misses
distribution (based on finite difference) integrate-pdf
converted from private to publiccontingency-2x2-measures
- selection of 2x2 contingency measures- clj-kondo hooks
fastmath.stats.bootstrap
introduced as the replacement offastmath.stats/bootstrap
function (now deprecated)
p-value
- helper for calculating p-valuecontingency-table
- calculate frequenciesbinomial-test
t-test-one-sample
,t-test-two-samples
(more information returned)z-test-one-sample
,z-test-two-samples
f-test
power-divergence-test
+ special caseschisq-test
multinomial-likelihood-ratio-test
minimum-discrimination-information-test
neyman-modified-chisq-test
freeman-tukey-test
cressie-read-test
- distribution tests
ad-test-one-sample
- Anderson Darling testks-test-one-sample
,ks-test-two-samples
- Kolmogorov Smirnov test
- ANOVA tests
one-way-anova-test
levene-test
brown-forsythe-test
fligner-killeen-test
kruskal-test
- Kruskal-Wallis rank sum test
(set! *warn-on-reflection* true)
removed (motivation)- names changed:
ttest-
->t-test-
- RidgedMulti.java refactored
- effect size functions revisited
- a nasty bug with primitive macro generation, how could I missed that?
:histogram
issues with low number of samplesfast-max
andfast-min
had wrong inline operation- wrong primitive hinting and protocol extensions
set-seed
calls protocol for PRNGsintegrate-pdf
accuracy increasednrd
fixed when bandwidth was 0- kde estimator revisited
use-primitive-operators
accepts optional set of symbols which shouldn't be imported
abs
redefinition invector
was not properly implemented (problem was visible whenvector
was precompiled with javac for Clojure2d)
ball-random
- unit ball random vectorsequence-generator
:ball
added - unit ball random sampling- some more fields
ceil
andfloor
can snap to the nearest multiply of scale parameter (optional)
- Vec3 rotation
- [breaking] ensure proper behaviour for Clojure interfaces for fastmath.vector custom types (see: nextjournal/clerk#64)
next-double
andprev-double
to properly cross 0.0- Clojure 1.11.0 fixes (
abs
)
jinc
- besselj1(x)/xmuladd
macroevalpoly
andmevalpoly
- evaluate polynomial (from Julia)makepoly
create polynomial functionSi
andCi
- https://dlmf.nist.gov/6.2#ii- much more types of
skewness
andkurtosis
- much more effect size functions:
r2-determination
,eta-sq
,omega-sq
,epsilon-sq
,cohens-f2
,cohens-q
,cramers-v
,cohens-w
,tschuprows-t
trim
andwinsor
data based on quantiles- distances:
dist-ang
- angular distancesim-cos
- cosine similarityangular
- refers to angular distance
->seq
infastmath.random
can accept sampling scheme (:uniform
,:stratified
and:systematic
)- new vector functions:
softmax
,logsoftmax
,logsumexp
,logmeanexp
,shift
(adds a value to all elements),average
(mean / weighted average)
moment
didn't work properly for certain caseseffect-size
methods fixed- [breaking] fixes around cosine distance and similarity
fastmath.distance/cosine
- refers to cosine similarity now- changes around data based distributions:
continuous-distribution
is the same askde
integer-discrete-distribution
andreal-discrete-distribution
are sorted version ofenumerated-int
andenumerated-real
- [breaking]
fastmath.vector/dist-cos
- wrong implementation
- grid:
rhombus
is now a real rhombus,triangle
is equilateral now (cont. #8)
cell->mid
for:triangle
grid returned wrong mid point fordown
triangles (#8)
- [breaking]
:triangle
grid anchor is 3d now, last coordinate indicates triangle position (up/down)
- better histogram split
- bias corrected and accelerated percentile method for boostrap (PR7)
- bias corrected percentile method for boostrap (PR6)
l-bfgs-b
optimizer as:bfgs
- SMILE version bump to 2.6.0
fastmath.gp
relies now on SMILE backend (openblas/mkl)
set-seed!
accept:smile
RNG which callssmile.math.MathEx/setSeed
function. Also, without RNG function will set seed to both: Smile anddefault-rng
.
:kde
distribution - create distribution based on kernel density estimation
- SMILE version bumped to 2.5.0
- netlib replaced by mkl (smile)
moving-average-filter
- moving average smoothingkernel-smoothing-filter
- signal smoothing filter using kernel methods
savgol-filter
- Savitzky-Golay smoothing filter
Breaking change: due to significant change of SMILE API I decided to remove three ML namespaces: classification and regression. They probably be back as a separated bindings or incorporeted into SMILE directly.
lloyd
k-means variantsspectral
clusteringgp
namespace (GaussianProcesses) - moved from regression namespace
neural-gas
clustering
- [breaking] removed namespaces: classification and regression
:outliers?
key is removed from regrouped data for clusters, now:outliers
key is created when outliers are present
round-even
- even (or IEEE/IEC) roundingcut
- cut range into even intervalsslice-range
- cut range into even steps:dense
rank ties method
- R2 sequence is able to generate up to dimensions=15
- [breaking]
rank
andorder
chagned to be zero based. - Licence changed to MIT
co-intervals
works the same as in R nowgroup-by-intervals
checks all intervals instead the first one
moment
when center is nil should use mean
moment
function
second-moment
(invalid implementation)
- removed slf4j deps
- some defaults for scan optimization
- B-Spline and polynomial interpolation
cb
as cube of the number
mnorm
- macro version ofnorm
- protocol's wrapping functions shouldn't have primitive math hints (to avoid too many primitive->boxed conversions)
Cleaned documentation with more usage examples.
demean
functionseq->vec2
,seq->vec3
andseq->vec4
warp-noise
- fastmath.signal - audio signal processing with effects + oscillators
- [possibly breaking] all protocols put in separate namespace, wrapping functions introduced (with type hints where possible)
- binary measure parameters
- acf calculation
- MAD SMILE bindings replaced (SMILE mutates an array)
TOLERANCE
constant infastmath.vector
optimization
package with various optimization methods- BayesianOptimization
- NegativeBinomial distribution
- bunch of SSJ based distributions
- bootstrap datasets
- t-test
- [breaking]
classification
andregression
refactored - [breaking]
kernel-density
moved tokernel
namespace
- m/seq->double-array didn't recognize array type properly
make-vector
returns vector for given number of dimensions and optional sequence.- vectors implements now
IPersistentVector
to work withvector?
- core.matrix protocols for vectors
- math functions can operate on vectors now (like [[sin]] etc.)
- new functions for vectors
clamp
,zero-count
,nonzero-count
,as-vec
- classification bindings for SMILE,
XGBoostand LIBLINEAR expm1
function- monotone interpolation
- various extent stats funcions
haversine
andhaversine-dist
(distance)- predicates
nan?
,inf?
,valid-double?
,invalid-double?
,between?
- calculate intervals for set of values
co-intervals
(same as R's function). Alsogroup-by-intervals
. - various kernel-density methods and
kernel-density-ci
for kernel density with confidence interval - various effect size functions
- binary measures like fn, tp, etc... (around 30 statistics)
- multivariate normal distribution added
- gaussian processes reimplemented
- kernels consolidated in one namespace
- use
fmap
instead ofapplyf
(now deprecated) - outliers are samples which are outside inner fence instead of outer fence
- Vectors are associative now
- [breaking]
kernel-density
is now multimethod - [breaking]
histogram
:bins
contain starting point and sample counts only
- rbf-obj converter
- rbf and mercer namespaces (use fastmath.kernel instead)
- Various grid operations
- hashCode for vectors
- Breaking: sequence generator creatators return lazy sequence now (instead of function returning sequence)
lcm
- least common multiplier- Vec types implement
Reversible
Indexed
ILookup
- negative values for some constants (
PI
,E
etc.)
GAMMA
constant name clash
stats-map
returns list of outliers rather than number of outliers
:bessel
vector field removed (hard to limit input range)
sample
can now return pairs of[x,(f x)]
.
- estimators for number of bins in histogram
- kernel-density function
- histogram data enhanced
fastmath.clustering
namespace
- removed
k-means
fromfastmath.stats
norm
when domain is a point, returns range start when value is less or equal domain, range end otherwise- small fix in one field
- curl for 2d vector fields
- :default (:jdk) rng is added
- MersenneTwister is not synchronized, default RNG is :jdk now
- easings namespace
sample
function- extent stat ([min,max] pair)
- histgram
- vector field functions moved from clojure2d, api changed
- interpolator have shorter names now (without
-interpolator
suffix) - rbf functions are moved to separate namespace
- changed parameters order in interpolators (xs and ys are last)
- next-float-up -> next-double
- next-float-down -> prev-double
- BesselJ
- all Gamma function variants (regularized, etc)
- regularized Beta
- log1p
estimation-strategy
can be passed to any function calculating quantiles/percentiles- ->seq can accept number of samples now
- low-exp, high-exp to find lower/greater exponent for given base and number
stats-map
doesn't contain select keys option anymore
Initial version created from Clojure2d
library.