Hi,

I have one comment on that. When I need this, I write code like

a[0] * b

where `a` is a vector of 1 element. This works fine but makes the code
unclear as it is not evident that `a` has only one element. Of course, I
can add an assert or a comment myself but that relies on me doing it...

I don't like the automatic casting but I would find an explicit method
clearer. I am not able to find a good name for it. Maybe an explicit
cast operation ?

a.asScalar() * b

a.singleElement() * b

static_cast<Scalar>(a) * b


Joseph


On 29/07/2020 03:56, Rasmus Munk Larsen wrote:
> Generally speaking, silently treating vectors as scalars and vice
> versa with implied broadcasting is a common source of subtle bugs, so
> this behavior is unlikely to change. Eigen does support scalar*vector,
> if you extract the single element as such.
>
> On Tue, Jul 28, 2020 at 6:06 AM Mario Azcueta <[email protected]
> <mailto:[email protected]>> wrote:
>
>     Is there a way of adding/subtracting/multiplying two
>     Eigen::ArrayXd arrays both when (a) they have dimension N, and (b)
>     when one of them has dimension N and the other dimension 1?
>
>     I'd ideally like that the array with size=1 is treated like a
>     scalar for these operations. I'm somewhat trying to replicate the
>     way Matlab behaves.
>
>     As an example, I'd the code below to work both when a1 and a2 have
>     the same size, as well as when one of them has size=1 and the
>     other size=N:
>
>     ArrayXd add_arrays(const ArrayXd& a1, const ArrayXd& a2)
>     {
>        return a1 + a2;
>     }
>
>     Of course, this could be solved with an if statement, but I want
>     to avoid that since my actual code would require to write a long
>     function verifying all combinations of sizes (they're many args).
>     Also, writing a template function gets me problems when trying to
>     use some ArrayXd methods and I pass a double.
>
>     I've looked into the EIGEN_ARRAYBASE_PLUGIN preprocessor which may
>     seem like the way to extend this behavior, but I'm not sure this
>     is the right way.. any advice will be welcome.
>
>     Note: I've also post this question here
>     
> https://stackoverflow.com/questions/63074198/c-eigen-treat-single-element-array-as-scalar-for-arithmetc-operations
>

Reply via email to