Need help with vectorz-clj?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

mikera
195 Stars 20 Forks 1.0K Commits 13 Opened issues

Description

Fast matrix and vector maths library for Clojure - as a core.matrix implementation

Services available

!
?

Need anything else?

Contributors list

# 108,918
Clojure
uri
Clojure...
Shell
851 commits
# 504,699
Clojure
HTML
34 commits
# 293,139
Clojure
C
Emacs
emacs-l...
5 commits
# 364,154
Clojure
Shell
Common ...
3 commits
# 364,638
Clojure
cljs
CSS
repl
1 commit
# 3,156
sass-fr...
splash
Socket....
pipelin...
1 commit
# 236,042
Clojure
CSS
Clojure...
server-...
1 commit
# 103,729
Clojure
Bash
shell-s...
Redux
1 commit

vectorz-clj

Join the chat at https://gitter.im/mikera/vectorz-clj

Clojars Project

Build Status Dependency Status

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:
  • An idiomatic high-level Clojure API using core.matrix
  • General purpose multi-dimensional arrays
  • High performance (about as fast as you can get on the JVM). vectorz-clj is currently the fastest pure-JVM vector/matrix library available for Clojure

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:

  • "Pure" functions for an idiomatic functional programming style are provided. These return new vectors without mutating their arguments.
  • Primitive-backed special purpose vectors and matrices for performance, e.g.
    Vector3
    for fast 3D maths.
  • Flexible DSL-style functions for manipulating vectors and matrices, e.g. the ability to create a "view" into a subspace of a large vector.
  • core.matrix fully supported - see: https://github.com/mikera/core.matrix
  • Pure cross-platform JVM code - no native dependencies
  • "Impure" functions that mutate vectors are available for performance when you need it: i.e. you can use a nice functional style most of the time, but switch to mutation when you hit a bottleneck.

Documentation

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:
  • https://github.com/mikera/core.matrix/wiki

For more information about the specific details of vectorz-clj itself, see the vectorz-clj Wiki.

Status

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.

License

Like

Vectorz
,
vectorz-clj
is licensed under the LGPL license:
  • http://www.gnu.org/licenses/lgpl.html

Usage

Follow the instructions to install with Leiningen / Maven from Clojars:

  • https://clojars.org/net.mikera/vectorz-clj

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
=&gt; #<matrix22>

;; define a length 2 vector (a 1D matrix is considered equivalent to a vector in core.matrix)
(def v (matrix [1 2]))
v
=&gt; #<vector2>

;; Matrix x Vector elementwise multiply
(mul M v)
=&gt; #<matrix22>

;; Matrix x Vector matrix multiply (inner product)
(inner-product M v)
=&gt; #<vector2>

For more examples see Wiki Examples

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.