The numpy array is a great data structure. I know it's <i>not python</i> but I wanted to plug our attempt at this for the jvm, nd4j:<p><a href="http://nd4j.org/tensor" rel="nofollow">http://nd4j.org/tensor</a><p>We have a java wrapper:<p><a href="https://github.com/deeplearning4j/nd4j" rel="nofollow">https://github.com/deeplearning4j/nd4j</a><p>Scala:<p><a href="https://github.com/deeplearning4j/nd4s" rel="nofollow">https://github.com/deeplearning4j/nd4s</a><p>And underlying c++:<p><a href="https://github.com/deeplearning4j/libnd4j" rel="nofollow">https://github.com/deeplearning4j/libnd4j</a><p>We heavily dog food it in our deep learning library but we're hoping this can be more broadly useful for people.
If you like NumPy, it might be worth taking a look at Dask[1]. Very similar API, but designed to support arrays larger than memory, as well as operations across a network cluster.<p>[1] <a href="http://dask.pydata.org/en/latest/" rel="nofollow">http://dask.pydata.org/en/latest/</a>
If only it was also available for C++. Armadillo is nice but it has a lot of important differences, and doesn't seem to support more than 3 dimensional matrices.
It's a shame that there is no consolidated way to provide index labels to both columns and rows without wrapping this in another class (e.g., your own, or pandas). R's matrices and arrays are very convenient as they provide this functionality out-of-the-box.
dynd is next generation numpy for language-agnostic usage: <a href="https://github.com/libdynd/libdynd" rel="nofollow">https://github.com/libdynd/libdynd</a>