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

时间:2018-03-18 13:45:44

标签: c++ eigen

假设'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;
}

2 个答案:

答案 0 :(得分:3)

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

1

由于括号中包含两个向量之间的简单差异,因此操作比使用(Vector3d::Ones() - a).cwiseProduct(b) 的版本更容易识别,因此该版本可以说更清晰一些。

另一个等效变体包括使用.array()代替.asDiagonal()

.cwiseProduct()

答案 1 :(得分:2)

(1-a.array())仅适用于矩阵表达式,而不适用于数组(元素方式)表达式(其中“cwise”将是多余的)。简单的选择是将(1-a.array()).matrix().cwiseProduct(b)表达式转换为矩阵表达式(1-a.array()) * b.array()(在编译时,所以免费);或者更好的是,如果你想做元素智能的东西,只需使用所有数组对象ALTER TABLE Contact ADD FOREIGN KEY (Customer_ID) REFERENCES Customer(Customer_ID) (再次,编译时转换是免费的)。