The NumPy array: a structure for efficient numerical computation (2011) [pdf]
hal.inria.fr
hal.inria.fr
We have a java wrapper:
https://github.com/deeplearning4j/nd4j
Scala:
https://github.com/deeplearning4j/nd4s
And underlying c++:
https://github.com/deeplearning4j/libnd4j
We heavily dog food it in our deep learning library but we're hoping this can be more broadly useful for people.
Given that these are open source and not even commercial projects, and that this is presumably an enthusiastic developer for those projects just sharing his/her work with a potentially interested audience, I hardly think the "spam" label is appropriate.
And to answer your question specifically, based on what I've just read, ND4J offers an optimized n-dimensional array intended for numeric/scientific computing, very much in the manner of numpy. This is presumably what the comment's "our attempt at this for the jvm" refers to.
Apologies if it came off like that but the main intent was to show an alternative implementation. If you actually look at the nd4j.org link you'll also notice a simpler/more concise description of the same concepts.
Eg: linear buffers,shapes, strides, offsets, dimensions
It also looks like you have some support for GPU acceleration, which is cool since as far as I know (barring recent developments), numpy doesn't have this natively.
Yes we put a lot of work in to multi gpu and the like. Send me an email if you're interested in any details! Emails in profile.
Otherwise I'd have to pay someone a salary to do this..at the end of the day nd4j is part of what keeps us going.
so based on comparison, it's clear the nd4j uses the key structural features of numpy arrays--linear buffers, strides, bit-wise and integer indexing, etc.--and the coincidence in the two APIs is also very high (eg, comparing the methods for a 2D NumPy array versus those for a 2D nd4j array).
in my view, this is an impressive project, both w/r/t the work done to date and w/r/t the impact on java and scala open-source communities. In Scala land for instance, the most widely used matrix computation library is Breeze, which i've never found easy to use. nd4j, in particular, the Scala bindings, nd4s, seem to me to be a substantial improvement both in architecture and in the api.
There is Eigen but it wont do multidimensional stuff. Although there might be a few projects out there that wrap the multidimensional functionality around Eigen arrays.
https://bitbucket.org/eigen/eigen/src/039efd86b75ce1b72befb7...
I'm sure you can find more polished efforts if you look around.
NumPy's representation is very close to that of FORTRAN. This problem was mostly solved in the 1950s and 1960s, when FORTRAN DO-loop optimizations for arrays got good.