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

时间:2017-10-30 11:12:44

标签: c++ eigen eigenvector

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

我想创建一个新的向量C,以便:

  • 如果B [i]是NaN,则C [i] = A [i]
  • 否则:C [i] = B [i]

由于应用程序对延迟敏感,我想避免复制A和B.

现在我正在使用一个简单的for循环,但我想了解如何以Eigen的智能(呃)方式实现它。

1 个答案:

答案 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);

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