掩码并将 numpy where 函数应用于 C++ 中的向量

mask and apply numpy where function to a vector in c++

我正在使用 C++,并希望将向量的掩码与验证条件的索引的搜索结合起来,类似于 numpy where 函数。

这是一个例子:

std::vector<int> id     = {61, 66, 68, 80}
std::vector<int> val    = {0, 0, 2, 1};
std::vector<int> offset = {62, 65, 70};
std::vector<int> masked;

使用后

masked = offset[val];

masked 应该是这样的:masked = {62, 62, 70, 65}

之后,我想找到 id 个向量元素大于 masked 个向量元素的索引。两个向量具有相同的长度。这相当于 Python.

中 Numpy 的 where 函数
c = np.where(id > masked)[0]

c 等同于 vector<int>,应该如下所示:c = {1,3}

有什么想法吗?谢谢!

您可以只使用一个简单的循环。请注意,您不需要中间数组 masked。这是一个(未经测试的)示例:

std::vector<int> c;
c.reserve(val.size());

for(size_t i=0 ; i<val.size() ; ++i)
    if(id[i] > Offset[val[i]])
        c.push_back(i);