https://www.roguewave.com/products-services/imsl-numerical-l...
However, is the matrix formulation the best one, if we have access to a programming language (like CUDA) where we have more flexibility in how we perform computation? For example, while we might be able to express k-means clustering as a matrix operation, we might express it more efficiently by programming it directly.
If there aren't any redundant operation, matrices give a good abstraction that does not leak much. Libraries take care of the best use of cache.
If you have to build castles out of individual grains of sand and burnt clay, it will limit how many of them you can build. That's why building blocks are useful. Where the building blocks don't quite fit, there is always sand, clay and mortar to fill the gaps.
This seems like the choice when you want to have custom kernels run on your large arrays.
I would be interested in anything that can serve as good building block material that has a good set of primitives built in.