Hi All, I just open sourced a new Clojure library vectorz-clj with support for high performance vector maths in Clojure. It's fairly general purpose, and designed for use in 3D games, simulations and machine learning applications. I'm using it for my own machine learning apps and it is working very well (e.g. my talk at the Clojure Conj 2012 features some example usage)
Design goals: - Pure Java (i.e. avoid the need for dependencies on native code libraries like BLAS) - High performance, roughly defined as "as fast as you can reasonably get on the JVM" - Support multiple types of concrete vectors, e.g. primitive x,y,z 3D vectors as well as large general purpose (1000+ dimension vectors) - A nice Clojure API for vector operations (work in progress!) The need for high performance means that underlying vectors need to be mutable (apologies to the purists!), however to make the API nice I've provided pure functional versions of operations as well as the in place operations that mutate their arguments. Hopefully this is a nice compromise between having access to high performance operations when you need them and allowing idiomatic Clojure usage when you don't e.g. In-place "add!" mutates vector a: (add! a b) Pure "add" creates a new vector: (let [result (add a b)] ....) The Clojure library is here: https://github.com/mikera/vectorz-clj The underlying vector data structures are in a separate Java library: https://github.com/mikera/vectorz Contributions / comments / suggestions very welcome. API is not yet set in stone, so I'm very open to ideas on how to make it better. Mike. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en