gpt4 book ai didi

filter - 按键值进行推力过滤

转载 作者:行者123 更新时间:2023-12-04 04:50:47 24 4
gpt4 key购买 nike

在我的应用程序中,我有一个这样的类:

class sample{
thrust::device_vector<int> edge_ID;
thrust::device_vector<float> weight;
thrust::device_vector<int> layer_ID;

/*functions, zip_iterators etc. */

};

在给定的索引处,每个向量存储相同边的相应数据。

我想编写一个过滤掉给定层的所有边缘的函数,如下所示:
void filter(const sample& src, sample& dest, const int& target_layer){
for(...){
if( src.layer_ID[x] == target_layer)/*copy values to dest*/;
}
}

我发现最好的方法是使用 thrust::copy_if(...) (details)

它看起来像这样:
void filter(const sample& src, sample& dest, const int& target_layer){
thrust::copy_if(src.begin(),
src.end(),
dest.begin(),
comparing_functor() );
}

这就是我们解决我的问题的地方 :
comparing_functor()是一元函数,这意味着我不能通过我的 target_layer对它的值(value)。

任何人都知道如何解决这个问题,或者有一个想法来实现这个同时保持类的数据结构完整?

最佳答案

除了通常传递给仿函数的数据之外,您还可以将特定值传递给仿函数以在谓词测试中使用。这是一个有效的例子:

#include <iostream>
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sequence.h>
#include <thrust/copy.h>

#define DSIZE 10
#define FVAL 5

struct test_functor
{
const int a;

test_functor(int _a) : a(_a) {}

__device__
bool operator()(const int& x ) {
return (x==a);
}
};

int main(){
int target_layer = FVAL;
thrust::host_vector<int> h_vals(DSIZE);
thrust::sequence(h_vals.begin(), h_vals.end());
thrust::device_vector<int> d_vals = h_vals;
thrust::device_vector<int> d_result(DSIZE);
thrust::copy_if(d_vals.begin(), d_vals.end(), d_result.begin(), test_functor(target_layer));
thrust::host_vector<int> h_result = d_result;
std::cout << "Data :" << std::endl;
thrust::copy(h_vals.begin(), h_vals.end(), std::ostream_iterator<int>( std::cout, " "));
std::cout << std::endl;
std::cout << "Filter Value: " << target_layer << std::endl;
std::cout << "Results :" << std::endl;
thrust::copy(h_result.begin(), h_result.end(), std::ostream_iterator<int>( std::cout, " "));
std::cout << std::endl;
return 0;
}

关于filter - 按键值进行推力过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com