I think we’re actually in agreement. Matrex is exactly the type of native library I was talking about. It’s a wrapper around CBLAS, which is the same thing NumPy uses.
When I wrote before about performance, I mentioned that a JIT could optimize away the problems. I actually spoke to one of the core contributors to Erlang and he pointed out that part of the optimization for these operations requires in place mutation. So, with the native data structures that are immutable, you can certainly do these operations, they’ll just be less efficient than the mutable ones. There’s an interesting project that uses Erlang’s atomics to implement a matrix library called Matrax, which is inspired by Matrex. It’s interesting because it only relies on things native to Erlang.