On 4/16/2013 10:16 PM, Steven Watanabe wrote:
AMDG
On 04/16/2013 07:20 PM, Mario Mulansky wrote:
Hi,
I wanted to add an elementwise divide operations for ublas matrices using operator /
I don't think that's such a great idea. Using regular operators for elementwise operations is likely to be surprising. i.e. if you can do (A / B) you should be able to do (A * B) as well, and it you be the inverse of A / B. But multiplication is defined for matrices and is *not* an elementwise operation. There is no way to define this that won't surprise someone. There's a good reason why uBlas doesn't provide these operators already and why MATLAB has a separate set of operators for elementwise operations.
Unfortunately, there is operator/ defined for matrix and integral types which hides any other operator definition (matrix_expression.hpp l. 3388) and thus makes it impossible to add this functionality. I would like to add an enable_if statement there that checks if the second argument is convertible to matrix::value_type, as is done for other operators. Who would be responsible for this small change? I can provide the according patch, it's almost trivial.
FWIW eigen3 implements element wise operators by converting a matrix representation to an array representation and doing operators there. Vector4f a, b, c; c = a.array() * b.array(); or c = a.array().abs().pow(3) * b.array().abs().sin(); where every operation is an element wise. Naturally this uses TMP so .array() doesn't make a copy or anything silly.