On 16/05/2010, at 10:17, Pierre-Etienne Meunier wrote: > I've also just noticed a lack in the vector library : multidimensional arrays > seem to require indirections like in caml, whereas in C or in Data.Ix, there > is a way to avoid this. This is especially important for avoiding cache > misses with many dimensions, as well as for providing a clean interface. For > instance if a 10x10 matrix is initialized unproperly like > > Data.Vector.replicate 10 $ Data.Vector.replicate 10 0 > > The result is a total mess. Surely, every programmer knows that a computer > has got memory, and that this memory has to be allocated, but from what I > understand of haskell, I would expect the interface and the RTS to do it for > me. And an integer multiplication, followed by an addition, is way cheaper > than accessing uncached memory. Or maybe I do not understand that pipelines, > hyperthreading and all that stuff would give you the same result ?
You are quite right that vector only supports nested arrays but not multidimensional ones. This is by design, however - the library's only goal is to provide efficient one-dimensional, Int-indexed arrays. I'm thinking about how to implement multidimensional arrays on top of vector but it's not that easy. While repa is a step in that direction, I also need to support mutable arrays and interoperability with C which complicates things immensely. That said, if all you need is a matrix it's quite easy to implement the necessary index calculations yourself. Also, since you are working with numerics I highly recommend that you use either Data.Vector.Unboxed or Data.Vector.Storable instead of Data.Vector as boxing tends to be prohibitively expensive in this domain. Roman _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe