有没有办法用pow
函数转换推力向量?换句话说,我想将向量的每个元素x
转换为pow(x,a)
,a
为常量。
答案 0 :(得分:2)
有关如何使用初始化参数编写函数,请参阅“推力快速入门指南”中的Section Transformations。
struct saxpy_functor
{
const float a;
saxpy_functor(float _a) : a(_a) {}
__host__ __device__
float operator()(const float& x, const float& y) const {
return a * x + y;
}
};
答案 1 :(得分:2)
这是一个完整的例子。正如@Eric所提到的,所需要的只是定义自己的幂函子并使用thrust::transform
。
#include <thrust/sequence.h>
#include <thrust/device_vector.h>
class power_functor {
double a;
public:
power_functor(double a_) { a = a_; }
__host__ __device__ double operator()(double x) const
{
return pow(x,a);
}
};
void main() {
int N = 20;
thrust::device_vector<double> d_n(N);
thrust::sequence(d_n.begin(), d_n.end());
thrust::transform(d_n.begin(),d_n.end(),d_n.begin(),power_functor(2.));
for (int i=0; i<N; i++) {
double val = d_n[i];
printf("Device vector element number %i equal to %f\n",i,val);
}
getchar();
}