Chiusa. Questa domanda è fuori tema . Attualmente non accetta risposte.

Commenti

  • Sì, Pick[] è del tutto appropriato: Pick[T, Positive[Ctl]].
  • Grazie! E se volessi conoscere la posizione dellelemento di Ctl >2?
  • Sostituisci T con Range[Length[T]] o qualcosa del genere …
  • Ora che ci penso, Position[] è utile anche: Position[Ctl, x_ /; x > 2].

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] 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *