<åt sidan class = "s-notice s-notice__info js-post-notice mb16" role = "status">

Stängd. Denna fråga är utanför ämnet . För närvarande accepteras inte svar.

Kommentarer

  • Ja, Pick[] är helt lämpligt: Pick[T, Positive[Ctl]].
  • Tack! Och om jag ville veta positionen för elementet i Ctl >2?
  • Ersätt T med Range[Length[T]], eller något liknande …
  • Nu när jag tänker på det, Position[] är också användbart: Position[Ctl, x_ /; x > 2].

Svar

Du kan hitta positionen / indexet i en matris med alla värden i ett specificerat intervall (som Matlabs sökning) med Position. Till exempel:

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

eller

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

Dessa hittar index för alla element i a med värden mellan 0,3 och 0,7. Elementen kan extraheras från a med hjälp av

Extract[a, pos] 

För det begärda exemplet:

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

Som föreslagits av JM i kommentarerna kan du också använda Pick:

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

Svar

Du använder ett PositionIndex med KeySelect för detta, vilket är ett bra tillvägagångssätt om du behöver använda flera tester mot samma 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} 

Kommentarer

  • Visste ' visste inte PositionIndex!
  • @Pillsy tack för att du introducerade PositionIndex till mig +1 🙂

Svar

Bara för lite löjlighet (som täcker några av de givna svaren):

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

Olika:

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] 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *