2016-03-07 45 views
1

我有n向量数量(单列),它们是相关的。其中一个(假设第一个n载体)有一堆NaN。我已经使用了erase - remove_if成语来清除这个包含NaN的行的向量。我想同时或事后从所有其他向量中删除完全相同的行。这似乎是一个常见的编码问题,但我找不到一个例子。我用C++编写了OpenCV库。如何从多个向量中删除相同的行位置?

这里是我的代码示例不工作,我认为这是一种什么三木是在暗示

vector<float> RemoveManyEs(vector<float> &V1, vector<float> &V2, vector<float> &V3) 
{ 
    int length = V1.size(); 
    int n = 0; 
    do 
    { 
     if (isnan(V1.at(n))) 
     { 
      V1.erase(V1.begin() + n); 
      V2.erase(V2.begin() + n); 
      V3.erase(V3.begin() + n); 
     } 
     n += 1; 
    } while (n < length); 
return V1,V2,V3; 

}

+0

如果向量必须保持锁步,为什么还有其他向量? – user4581301

+0

只需扫描您的第一个矢量(或包含NaN的矢量),并存储NaN的索引。然后,从每个向量中删除检索索引处的元素。 – Miki

+0

试图找出如何把我的示例代码在这个评论继续讨论 – Clay

回答

0

考虑是否不是真的需要删除的行或是否将它们设置为零就足够了。如果少于10%的行需要被删除,那么删除它们对运行时间的影响可以忽略不计(甚至在重新分配的开销之后可能使事情花费更长的时间)。

例如,如果您计算相关矩阵,那么您将通过清零所有元素来获得相同的结果。这通常是一个更简单的操作,并会为您提供大多数应用程序所需的结果。

相关问题