我有两个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);
就性能而言,这不是矢量化的(至少上次我检查时是这样),但没有引入A
和B
的副本。它可能和你写的一样(据我所知,没有看到代码)。