Eigen:返回类型 1-a.array()

Eigen: return type of 1-a.array()

本文关键字:array 1-a 返回类型 Eigen      更新时间:2023-10-16

假设"a"的类型是Vector3d,我想知道1-a.array((的类型是什么。我有这个疑问,因为a.cwiseProduct(b)有效,但(1-a.array()).cwiseProduct(b)导致编译错误。像(1-a.array()).cwiseProduct(b)一样编写代码的正确方法是什么?

int main()
{   
    VectorXd a(3),b(3);
    a << 1,2,3;
    b << 2,3,4;
    // cout << (1-a.array()).cwiseProduct(b) << endl; //failed
    a = 1-a.array();
    cout << a.cwiseProduct(b) << endl; //works
    return 0;
}
表达式

可以在不使用 .array() 的情况下重写,方法是将 1 替换为 1 的向量:

(Vector3d::Ones() - a).cwiseProduct(b)

这个版本可以说是更干净一些,因为操作比.array()的版本更容易识别,因为括号包含两个向量之间的简单差异。

另一个等效的变体包括使用.asDiagonal()而不是.cwiseProduct()

(Vector3d::Ones() - a).asDiagonal() * b 

cwiseProduct仅适用于矩阵表达式,不适用于数组(元素明智(表达式(其中"cwise"是多余的(。简单的选项是将(1-a.array())表达式强制转换为矩阵表达式(1-a.array()).matrix().cwiseProduct(b)(在编译时,因此免费(;或者更好的是,如果你想做元素明智的事情,只需使用(1-a.array()) * b.array()的所有数组对象(同样,编译时转换是免费的(。