如何从多个向量中删除相同的行位置?
Posted
技术标签:
【中文标题】如何从多个向量中删除相同的行位置?【英文标题】:How to remove the same row location from multiple vectors? 【发布时间】:2016-03-07 18:23:56 【问题描述】:我有n
数量的向量(单列),它们是相关的。其中一个(假设是n
向量中的第一个)有一堆NaN
s。我使用了erase - remove_if
成语来清除包含NaN
s 的行的这个向量。我想同时或事后从所有其他向量中删除完全相同的行。这似乎是一个常见的编码问题,但我找不到一个例子。我正在使用 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<float>
....不完全
测试 vector考虑您是否真的需要删除这些行,或者将它们设置为零是否足够。如果需要删除的行少于 10%,那么删除它们对运行时的影响可以忽略不计(在重新分配开销之后,甚至可能会使事情总体上花费更长的时间)。
例如,如果您正在计算相关矩阵,那么您将通过将所有元素归零来获得相同的结果。这通常是一个更简单的操作,并且会为您提供大多数应用程序所需的结果。
【讨论】:
以上是关于如何从多个向量中删除相同的行位置?的主要内容,如果未能解决你的问题,请参考以下文章