Вам нужно создать бинарный функтор, чтобы применить операцию, а затем использовать итератор подсчета в качестве второго входа. Вы можете передать pos
и value
в конструктор функтора. Это будет выглядеть примерно так:
struct inv1_functor
{
const int pos;
const double value;
inv1_functor(double _value, int _pos) : value(_value), pos(_pos) {}
__host__ __device__
double operator()(const double &x, const int &i) const {
if (i == pos)
return 1.0/x;
else
return -x/value;
}
};
//...
thrust::transform(d_vec.begin(), d_vec.end(), thrust::counting_iterator<int>(), d_vec.begin(), inv1_functor(value, pos));