Closed. Cette question est hors sujet . Il naccepte pas les réponses actuellement.

Commentaires

  • Oui, Pick[] est tout à fait approprié: Pick[T, Positive[Ctl]].
  • Merci! Et si je voulais connaître la position de lélément de Ctl >2?
  • Remplacer T avec Range[Length[T]], ou quelque chose comme ça …
  • Maintenant que jy pense, Position[] est également utile: Position[Ctl, x_ /; x > 2].

Réponse

Vous pouvez trouver la position / index dans un tableau de toutes les valeurs dans un intervalle spécifié, (comme la recherche de Matlab) en utilisant Position. Par exemple:

pos = Position[a, _?((0.3 < # < 0.7) &)] 

ou

pos = Position[a, x_ /; (0.3 < x < 0.7)] 

Ceux-ci trouvent les indices de tous les éléments de a avec des valeurs comprises entre 0,3 et 0,7. Les éléments peuvent être extraits de a en utilisant

Extract[a, pos] 

Pour lexemple demandé:

t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0}; pos = Position[ctl, _?((# > 2) &)] Extract[t, pos] {{1}, {3}} {a, c} 

Comme suggéré par JM dans les commentaires, vous pouvez également utiliser Pick:

Pick[t, Thread[ctl > 2]] {a, c} 

Réponse

Vous utilisez un PositionIndex avec KeySelect pour cela, ce qui est une bonne approche si vous devez utiliser plusieurs tests sur le même tableau.

In[1]:= T = {a, b, c, d, e}; Ctl = {2.3, 0, 5, 0, 0}; In[2]:= index = PositionIndex[Ctl] Out[2]= <|2.3 -> {1}, 0 -> {2, 4, 5}, 5 -> {3}|> In[3]:= Extract[T, Values@KeySelect[index, Positive]] Out[3]= {a, c} 

Commentaires

  • Didn ' je ne sais pas PositionIndex!
  • @Pillsy merci de mavoir présenté PositionIndex +1 🙂

Réponse

Juste pour un peu de ridicule (couvrant certaines des réponses à donner):

t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0}; 

Divers:

Pick[t, Positive@ctl] (* JM*) Extract[t, Position[ctl, _?Positive]] (* bill s *) Cases[Transpose[{t, ctl}], {x_, _?Positive} :> x] First /@ Select[Transpose[{t, ctl}], #[[2]] > 0 &] Last@Reap[Sow @@@ (Transpose@{t, ctl}), _?Positive, Sequence @@ #2 &] True /. GroupBy[Transpose[{t, ctl}], Positive[#[[2]]] & -> First] 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *