我有两个Eigen :: VectorXd对象,A和B,具有相同的维度n。
我想创建一个新的向量C,以便:
由于应用程序对延迟敏感,我想避免复制A和B.
现在我正在使用一个简单的for循环,但我想了解如何以Eigen的智能(呃)方式实现它。
答案 0 :(得分:3)
尝试使用select
:
C = (B.array() == B.array()).select(B, A);
B==B
在非NaN
广告的值中为true,否则为true。
对于真值,select返回第一个矩阵,false表示第二个矩阵。
如上所述below by chtz,更简洁的写作方式是:
C = B.array().isNaN().select(A, B);
就性能而言,这不是矢量化的(至少我上次检查过),但没有引入A
和B
的副本。它可能和你写的一样(据我所知,没有看到代码)。