【问题标题】: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}...不

标签: c++ opencv vector


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-15
    • 2013-11-27
    • 2012-03-28
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多