如何从多个向量中删除相同的行位置?

Posted

技术标签:

【中文标题】如何从多个向量中删除相同的行位置?【英文标题】:How to remove the same row location from multiple vectors? 【发布时间】:2016-03-07 18:23:56 【问题描述】:

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

这是我的代码示例,它不起作用,我认为这是 Miki 的建议

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;

【问题讨论】:

如果向量必须保持同步,为什么还有其他向量? 只需扫描您的第一个向量(或包含 NaN 的向量),并存储 NaN 的索引。然后,从每个向量中删除检索到的索引处的元素。 试图弄清楚如何将我的示例代码放在此评论中以继续讨论 测试vector&lt;float&gt;....不完全 测试 vector...不 【参考方案1】:

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

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

【讨论】:

以上是关于如何从多个向量中删除相同的行位置?的主要内容,如果未能解决你的问题,请参考以下文章

怎么用MATLAB比较两个行向量中相同位置的元素

删除过滤器后,添加的行移动到最后一个位置

matlab中如何交换矩阵的行或者列

根据Rust中元素的频率和位置排序向量

如何对特定列中具有相同值的行求和

QT如何获取QTableWidget表格中的高亮位置的行数?