"Christian " <email@example.com> wrote in message <firstname.lastname@example.org>... > Hi, > > I hope to use histc on CUDA, but it's not a supported function. So I tried a workaround because I'm actually just interested in the second output argument: > > [~,ind] = histc(x,x_grid); > > is more or less equivalent to the following code (except for points outside the grid). > > ind=ones(size(x)); > for j=1:length(x_grid)-1 > ind(x>=x_grid(j) & x<x_grid(j+1)) = j; > end >
The best way is perhaps to sort x and x_grid concatenated together, which has an O(N*log(N)) complexity where N is numel(x)+ numel(xgrid). Furthermore the histc engine is possibly programmed in C and very optimal way.
You won't beat it with the trivial for-loop, even with CUDA.