Cerrado. Esta pregunta es fuera de tema . Actualmente no acepta respuestas.

Comentarios

  • Sí, Pick[] es totalmente apropiado: Pick[T, Positive[Ctl]].
  • ¡Gracias! ¿Y si quisiera saber la posición del elemento de Ctl >2?
  • Reemplace T con Range[Length[T]], o algo así …
  • Ahora que lo pienso, Position[] también es útil: Position[Ctl, x_ /; x > 2].

Responder

Puede encontrar la posición / índice dentro de una matriz de todos los valores en un intervalo específico, (como la búsqueda de Matlab) usando Position. Por ejemplo:

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

o

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

Estos encuentran los índices de todos los elementos en a con valores entre 0.3 y 0.7. Los elementos se pueden extraer de a usando

Extract[a, pos] 

Para el ejemplo solicitado:

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

Como sugirió JM en los comentarios, también puede usar Pick:

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

Respuesta

Utiliza un PositionIndex con KeySelect para esto, que es un buen enfoque si necesita usar múltiples pruebas contra la misma matriz.

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} 

Comentarios

  • No ' no sabía PositionIndex!
  • @Pillsy, gracias por presentarme PositionIndex +1 🙂

Responder

Solo por un poco de ridiculez (cubriendo algunas de las respuestas dadas):

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

Varios:

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] 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *