掩码并将 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);
我正在使用 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.
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);