2016-06-13 2 views
0

Je ne trouve pas dans les docs d'implémentation, qui montrera, comment je peux récupérer des index de valeurs dans le vecteur (matrice 1d), qui ont des valeurs correspondantes. Le plus proche est par exemple:Valeur de recherche dans le vecteur OpenCV

Mat b; 
Mat a = b == 5; 

ce qui devrait me donner une matrice de booléens. Et puis je peux l'utiliser pour extraire des index de valeurs égaux à 5. Y a-t-il un moyen plus performant? Il devrait envoyer toutes les valeurs en vecteur au GPU en parallèle et ensuite retourner l'index de la seule (ou première) valeur qui vaut 5. Et il ne devrait pas y avoir quelque chose de cadre "algorithme", comme:

std::find(...); 

Seulement intéressé par les solutions GPU parallèles.

Répondre

0

Cela peut être facilement fait par réduction de transformée.

D'abord, vous transformez l'élément vectoriel correspondant en son index et les éléments sans correspondance en un grand nombre, disons la taille du vecteur. Puis, dans l'étape de réduction, vous trouvez le minimum, qui est l'indice du premier élément correspondant dans le tableau.

Il s'agit d'un algorithme O (log (n)) qui peut être exécuté efficacement par GPU.

Vous pouvez l'implémenter soit par poussée, soit en écrivant votre propre noyau.

https://thrust.github.io/doc/group__transformed__reductions.html