Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.
Commenti
Risposta
Puoi trovare la posizione / indice allinterno di un array di tutti i valori in un intervallo specificato, (come Matlab “s find) utilizzando Position
. Ad esempio:
pos = Position[a, _?((0.3 < # < 0.7) &)]
o
pos = Position[a, x_ /; (0.3 < x < 0.7)]
Questi trovano gli indici di tutti gli elementi in a
con valori compresi tra 0,3 e 0,7. Gli elementi possono essere estratti da a
utilizzando
Extract[a, pos]
Per lesempio richiesto:
t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0}; pos = Position[ctl, _?((# > 2) &)] Extract[t, pos] {{1}, {3}} {a, c}
Come suggerito da JM nei commenti, puoi anche utilizzare Pick
:
Pick[t, Thread[ctl > 2]] {a, c}
Risposta
Utilizza PositionIndex
con KeySelect
per questo, che è un buon approccio se è necessario utilizzare più test sullo stesso array.
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}
Commenti
- Non ' so
PositionIndex
! - @Pillsy grazie per avermi presentato
PositionIndex
+1 🙂
Risposta
Solo per ridicolo (che copre alcune delle risposte date):
t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0};
Varie:
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]
Pick[]
è del tutto appropriato:Pick[T, Positive[Ctl]]
.Ctl
>2
?T
conRange[Length[T]]
o qualcosa del genere …Position[]
è utile anche:Position[Ctl, x_ /; x > 2]
.