Fast vector and matrix library for Clojure, building on the Vectorz library and designed to work with the core.matrix array programming API.
vectorz-clj
is designed so that you don't have to compromise, offering both:
The library was originally designed for games, simulations and machine learning applications,
but should be applicable for any situations where you need numerical double
arrays.
Important features:
Vector3
for fast 3D maths.vectorz-clj is intended to be used primarily as a core.matrix
implementation. As such, the main API to understand is core.matrix
itself. See the core.matrix
wiki for more information:
For more information about the specific details of vectorz-clj itself, see the vectorz-clj Wiki.
vectorz-clj
requires Clojure 1.4 or above, Java 1.7 or above, and an up to date version of core.matrix
vectorz-clj
is reasonably stable, and implements all of the core.matrix API feature set.
Like Vectorz
, vectorz-clj
is licensed under the LGPL license:
Follow the instructions to install with Leiningen / Maven from Clojars:
You can then use Vectorz
as a standard core.matrix
implementation. Example:
(use 'clojure.core.matrix)
(use 'clojure.core.matrix.operators) ;; overrides *, + etc. for matrices
(set-current-implementation :vectorz) ;; use Vectorz as default matrix implementation
;; define a 2x2 Matrix
(def M (matrix [[1 2] [3 4]]))
M
=> #<Matrix22 [[1.0,2.0][3.0,4.0]]>
;; define a length 2 vector (a 1D matrix is considered equivalent to a vector in core.matrix)
(def v (matrix [1 2]))
v
=> #<Vector2 [1.0,2.0]>
;; Matrix x Vector elementwise multiply
(mul M v)
=> #<Matrix22 [[1.0,4.0],[3.0,8.0]]>
;; Matrix x Vector matrix multiply (inner product)
(inner-product M v)
=> #<Vector2 [5.0,11.0]>
For more examples see Wiki Examples