Gesloten. Deze vraag is off-topic . Het accepteert momenteel geen antwoorden.

Reacties

  • Ja, Pick[] is helemaal correct: Pick[T, Positive[Ctl]].
  • Bedankt! En als ik de positie van het element van Ctl >2 wilde weten?
  • Vervang T met Range[Length[T]], of zoiets …
  • Nu ik erover nadenk, Position[] is ook nuttig: Position[Ctl, x_ /; x > 2].

Antwoord

Je kunt de positie / index binnen een array van alle waarden in een gespecificeerd interval vinden (zoals Matlab “s find) met Position. Bijvoorbeeld:

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

of

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

Deze vinden de indices van alle elementen in a met waarden tussen 0,3 en 0,7. De elementen kunnen worden geëxtraheerd uit a met

Extract[a, pos] 

Voor het gevraagde voorbeeld:

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

Zoals voorgesteld door JM in de commentaren, kunt u ook Pick gebruiken:

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

Antwoord

Je gebruikt een PositionIndex met KeySelect hiervoor, wat een goede benadering is als u meerdere tests tegen dezelfde array moet gebruiken.

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} 

Reacties

  • Wist ' niet PositionIndex!
  • @Pillsy bedankt voor het introduceren van PositionIndex aan mij +1 🙂

Antwoord

Gewoon voor wat belachelijkheid (die enkele van de gegeven antwoorden behandelt):

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

Diverse:

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] 

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *