> I'm not sure if D's operator overloading is
sufficiently rich to
allow separate operators for matrix multiplication and element-wise multiplication in matrix. (Dealing with this is a pain in numpy, the most common Python matrix library, as well as in Eigen, a common c++ matrix library.)

I don't see why in principle it shouldn't be doable. Whether it's possible to directly define custom operators for this akin to what MATLAB/Octave have: .+, .-, .*, ./, etc. I'm not sure, but it ought to be possible to define some kind of DSL/template along the lines of:

    c = ElementWise!("a + b");

A variation of that is what numpy and Eigen use. In numpy, for
the array class '*' is element-wise by default and the function
np.dot is matrix multiplication. For Eigen '*' is matrix
multiplication by default while the (member) function
cwiseProduct is element-wise. One the one hand, this is more
readable than matlab or R in terms of having a clear default.
(Whereas in matlab you have to be careful to distinguish between
'.*' and '*', or '*' and '%*%' in R.) But it's both hideous to
look at and to type. An improvement over .add or .times in Java
matrix libraries, but far from Nirvana. I'm hoping D can do
better.

Reply via email to