我的標誌爲一個缺失的值是0,所以從[0, A, B, 0, 0, C, 0]
我想[0, A, B, B, B, C, C]
(如果沒有以前的非缺失值存在,那麼就留下0)。如何使用CUDA Thrust使用最後一個非缺失值填充數組中的缺失值?
我正在使用CUDA Thrust庫,並且想知道是否有快速的方法來做到這一點,但沒有循環每個元素。
非常感謝。
我的標誌爲一個缺失的值是0,所以從[0, A, B, 0, 0, C, 0]
我想[0, A, B, B, B, C, C]
(如果沒有以前的非缺失值存在,那麼就留下0)。如何使用CUDA Thrust使用最後一個非缺失值填充數組中的缺失值?
我正在使用CUDA Thrust庫,並且想知道是否有快速的方法來做到這一點,但沒有循環每個元素。
非常感謝。
似乎很好。
#include <thrust/device_vector.h>
#include <thrust/scan.h>
#include <iterator>
template<class T>
struct FillMissing
{
__host__ __device__ T operator()(const T& res, const T& dat)
{
return dat == T(0) ? res : dat;
}
};
int main()
{
thrust::device_vector<double> vec(7);
vec[1] = 2;
vec[2] = 1;
vec[5] = 3;
thrust::inclusive_scan(
vec.begin(), vec.end(),
vec.begin(),
FillMissing<double>());
thrust::copy(
vec.begin(), vec.end(),
std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
}
輸出:
0 2 1 1 1 3 3
推力:: inclusive_scan'是該運營商關聯? –
@ m.s。是。 op(op(a,b),c)== op(a,op(b,c))== if(c!= 0){return c;} else if(b!= 0){return b ; } else {return a; }' – kangshiyin
嘗試'用自己的函子'binary_op' – kangshiyin