Geschlossen. Diese Frage lautet Off-Topic . Derzeit werden keine Antworten akzeptiert.

Kommentare

  • Ja, Pick[] ist völlig angemessen: Pick[T, Positive[Ctl]].
  • Danke! Und wenn ich die Position des Elements von Ctl >2 wissen wollte?
  • Ersetzen Sie T mit Range[Length[T]] oder so ähnlich …
  • Nun, da ich darüber nachdenke, Position[] ist ebenfalls nützlich: Position[Ctl, x_ /; x > 2].

Antwort

Sie können die Position / den Index innerhalb eines Arrays aller Werte in einem bestimmten Intervall finden (wie bei Matlabs Suche), indem Sie Position verwenden. Zum Beispiel:

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

oder

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

Diese finden die Indizes aller Elemente in a mit Werten zwischen 0,3 und 0,7. Die Elemente können mit

Extract[a, pos] 

aus a extrahiert werden Für das angeforderte Beispiel:

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

Wie von JM in den Kommentaren vorgeschlagen, können Sie auch Pick:

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

Antwort

Sie verwenden eine PositionIndex mit KeySelect Dies ist ein guter Ansatz, wenn Sie mehrere Tests für dasselbe Array verwenden müssen.

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} 

Kommentare

  • ' wusste es nicht PositionIndex!
  • @Pillsy, vielen Dank, dass Sie mir PositionIndex vorgestellt haben +1 🙂

Antwort

Nur aus Versehen (um einige der Antworten zu geben):

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

Verschiedene:

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] 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.