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



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

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

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

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

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

尝试使用select:

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

B==B在非NaN的值中将为true,否则为false。对于true值,select返回第一个矩阵,对于false返回第二个矩阵。

正如chtz下面所指出的,一种更紧凑的写作方式是:

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

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

最新更新