两个 Eigen::VectorXd 的高效(非标准)连接

Efficient (non-standard) join of two Eigen::VectorXd

我有两个 Eigen::VectorXd 对象,A 和 B,具有相同的维度 n。

我想创建一个新的向量 C,这样:

由于应用程序对延迟敏感,我想避免制作 A 和 B 的副本。

现在我正在使用一个简单的 for 循环,但我想获得有关如何使用 Eigen 以智能(呃)方式实现它的建议。

尝试使用 select:

C = (B.array() == B.array()).select(B, A);

B==B 在非 NaN 的值中为真,否则为假。 对于真值,select returns 第一个矩阵,对于假值第二个。

如前所述,更简洁的写法是:

C = B.array().isNaN().select(A, B);

在性能方面,这不是矢量化的(至少我上次检查过),但不会引入 AB 的副本。它可能和你写的一样(据我所知,没有看到代码)。