[Numpy-discussion] Insights / lessons learned from NumPy design

Mike Anderson mike.r.anderson.13 at gmail.com
Fri Jan 4 01:29:39 EST 2013


Hello all,

In the Clojure community there has been some discussion about creating a
common matrix maths library / API. Currently there are a few different
fledgeling matrix libraries in Clojure, so it seemed like a worthwhile
effort to unify them and have a common base on which to build on.

NumPy has been something of an inspiration for this, so I though I'd ask
here to see what lessons have been learned.

We're thinking of a matrix library with roughly the following design
(subject to change!)
- Support for multi-dimensional matrices (but with fast paths for 1D
vectors and 2D matrices as the common cases)
- Immutability by default, i.e. matrix operations are pure functions that
create new matrices. There could be a "backdoor" option to mutate matrices,
but that would be unidiomatic in Clojure
- Support for 64-bit double precision floats only (this is the standard
float type in Clojure)
- Ability to support multiple different back-end matrix implementations
(JBLAS, Colt, EJML, Vectorz, javax.vecmath etc.)
- A full range of matrix operations. Operations would be delegated to back
end implementations where they are supported, otherwise generic
implementations could be used.

Any thoughts on this topic based on the NumPy experience? In particular
would be very interesting to know:
- Features in NumPy which proved to be redundant / not worth the effort
- Features that you wish had been designed in at the start
- Design decisions that turned out to be a particularly big mistake /
success

Would love to hear your insights, any ideas+advice greatly appreciated!

   Mike.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20130104/d8368e65/attachment.html>


More information about the NumPy-Discussion mailing list