Arraymancer was born in-between linalg and neo and is targeted at machine learning, with a focus on deep learning and computer-vision (and later speech and language hopefully).
I started Arraymancer because you need 4-dimensional tensors for deep learning on images (Number of images, RGB colors, height, width) and 5d for videos or 3D images. It takes a Numpy/Julia/Matlab like multidimensional array approach meaning operations like reshaping, concatenating arrays over an arbitrary dimensions, permuting dimensions, working with stacked 2d matrices in a 3d tensors is possible and efficient. * * * There are a few twists: * Like Andrea, I like linear algebra operations like `+` and `*` to mean math (linear algebra) things, so broadcasting and element-wise matrix product is not implicit like in Numpy but opt-in: you must use custom operators `.+` and `.*`. The benefit is that if you have strange results you can grep those. * Like Nim, I choose to have value semantics for my tensors, meaning it's copy on assignation. You can opt-in to use "unsafe" operations like "unsafeReshape" or "unsafeTranspose" that will provide a view over the same data. It avoids a lot of beginners gotchas and like broadcasting makes it easy to grep for potential issues. Note: For CudaTensors I currently can't due to `=` overloading issues. * * * **My short-term plans (consolidating the base):** * Convolutional neural networks are just around the corner * Improve CudaTensors support * Doing demos * Cover common deep-learning use cases outside of Recurrent Neural Networks. **Mid-term plans (focus on data):** * CSV loading and/or conversion from a Nim dataframe package like NimData * Basic image manipulation (rotating, flipping, blurring ...), in an extra package like Arraymancer-vision. * Saving and loading models from disk. * Provide popular datasets (IRIS, MNIST ...) * Recurrent neural networks. **Long-term plans (hardware and format):** * More hardware support (AMD GPUs at least) * Provide utilities for general machine learning (and not only deep learning): * Sparse tensors but like Andrea said, apart on Cuda there is no standard :/ * PCA and SVD matrices decomposition * Clustering tools like KMeans, DBScans **Very long-term plans (wishlist):** * Bindings to gradient boosted trees libraries ([XGboost](https://github.com/dmlc/xgboost) / [LightGBM](https://github.com/Microsoft/LightGBM)) * Videos loading and analysis * New backends: OpenCL, Javascript, Apple Metal **Very (very !) long-term plans (wishlist reloaded):** * More natural language utilities or bindings like [spaCy](https://github.com/explosion/spaCy) * REST API for example, send Arraymancer an image and it returns what was detected in it. * [Bayesian Neural Networks](https://alpha-i.co/blog/MNIST-for-ML-beginners-The-Bayesian-Way.html) which works with uncertainty built-in **What is not a focus:** * Linear algebra/LAPACK not used in Machine Learning (like solving equations) * 2D/3D geometry and quaternions ([nim-glm](https://github.com/stavenko/nim-glm) is probably more suited than either neo or Arraymancer)