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
conRange[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
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]
PositionIndex
!PositionIndex
+1 🙂