2016-03-07 42 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%的行需要被刪除,那麼刪除它們對運行時間的影響可以忽略不計(甚至在重新分配的開銷之後可能使事情花費更長的時間)。

例如,如果您計算相關矩陣,那麼您將通過清零所有元素來獲得相同的結果。這通常是一個更簡單的操作,並會爲您提供大多數應用程序所需的結果。

相關問題