Seems like I can't change title anymore with the new forum :/.
Arraymancer is now at version 0.5: [release
announcement.](https://github.com/mratsim/Arraymancer/releases/tag/v0.5.0)
Here are the highlights:
* Backward incompatible: PCA now returns a tuple of the projected tensor and
the principal components. An overloaded PCA can be used with the principal axes
supplied by the user.
* Datasets:
* MNIST is now autodownloaded and cached
* Added IMDB Movie Reviews dataset
* IO:
* Numpy file format support
* Image reading and writing support (jpg, bmp, png, tga)
* HDF5 reading and writing
* Machine learning
* Kmeans clustering
* Deep Learning
* RNN: GRU support including fused stacked GRU layers with
sequence/timesteps
* Embedding layer with multiple timesteps support. Indexing can be done
with integers, byte, chars or enums.
* Sparse softmax cross-entropy: the target tensor subtype can now be
integers, byte, chars or enums.
* Adam optimiser (Adaptative Moment Estimation)
* Xavier Glorot, Kaiming He and Yann Lecun weight initialisation schemes
* N-D arrays / tensors
* Splitting and chunking support
* Fancy indexing via index_select
* End-to-end examples:
* [Sequence/time-series classification using
RNN](https://github.com/mratsim/Arraymancer/blob/v0.5.0/examples/ex05_sequence_classification_GRU.nim)
* [Text generation on Shakespeare and Jane Austen's Pride and
Prejudice](https://github.com/mratsim/Arraymancer/blob/v0.5.0/examples/ex06_shakespeare_generator.nim).
This can be applied to any text-based dataset (including blog posts, Latex
papers and code).
**A glimpse of the future**
I have been working on a new backend for Arraymancer called
[Laser](https://github.com/numforge/laser) which will address the CPU bottle
necks I have identified while developing Arraymancer. The internal
representation of tensors will change to a view over pointer + length instead
of a seqs for plain old datatypes. Strings, seqs and ref objects will still use
a seq backend.
Currently Laser offers or will offer:
* SIMD intrinsics,
* OpenMP templates,
* fused parallel iteration on strided tensors which I believe is the fastest
and most compact in terms of codesize among all languages and libraries
* 4x to 10x faster sum, min, max, exp, log compared to naive <math.h>
* matrix multiplication in pure Nim as fast as state-of-the-art OpenBLAS on
x86 CPUs.
I also started [Monocle](https://github.com/numforge/monocle), a
proof-of-concept visualization library based on [Vega](http://vega.github.io/)
And lastly I started focusing on reinforcement learning in [Agent
Smith](https://github.com/numforge/agent-smith). Currently it offers a wrapper
for the [Arcade Learning
Environment](https://github.com/mgbellemare/Arcade-Learning-Environment) to
train agents on Atari games. A wrapper for [Starcraft 2 Client
API](https://github.com/Blizzard/s2client-api) is planned and potentially
[Unity ML Agents](https://github.com/Unity-Technologies/ml-agents) if I managed
to understand how their Python bindings work.