[eigen] Treat single-element Array as scalar for arithmetc operations
• To: eigen@xxxxxxxxxxxxxxxxxxx
• Subject: [eigen] Treat single-element Array as scalar for arithmetc operations
• From: Mario Azcueta <mazcueta@xxxxxxxxx>
• Date: Tue, 28 Jul 2020 15:04:58 +0200
• Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=icjSzVIoezXXQu6ytnGWYk3UxHgl076X+/VtrXj4JYM=; b=UEIacJxRlwPEoDE/CWTBWLkqa7yZxzOvlnxJyUK5mdWjJWM9J4sR6XQuXjiJOzm8bN U7WMoAl36Fshtesx7/4ByfDD27drrygu8cUS/8Ogp145GSa3gaWHaRBBe7qDxv0s075a Ir1uBhh+RNWrl+U+ylHfuM3ui3aRMWQ4Tt0Nav/xdZUvZf1eWA582YpetsfdB0vg93PA ENAPF5m2ZyoQhss2MDqFbTbof8KzVadwRr5f4ZHrVziUQvARTUzX9Yy7tsvju/1TJ2Ih 3vgwflLOJvSgRTQw2BjHw8kpObCUg3aacxG9GEdfqGZ7RavuIvlIPKU+/iu6UHR42sdB k8dg==

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

 Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/