Stengt. Dette spørsmålet er utenfor emnet . Det aksepteres for øyeblikket ikke svar.
Kommentarer
Svar
Du kan finne posisjonen / indeksen i en matrise med alle verdier i et spesifisert intervall, (som Matlabs funn) ved hjelp av Position
. For eksempel:
pos = Position[a, _?((0.3 < # < 0.7) &)]
eller
pos = Position[a, x_ /; (0.3 < x < 0.7)]
Disse finner indeksene til alle elementene i a
med verdier mellom 0,3 og 0,7. Elementene kan trekkes ut fra a
ved hjelp av
Extract[a, pos]
For det etterspurte eksemplet:
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 foreslått av JM i kommentarene, kan du også bruke Pick
:
Pick[t, Thread[ctl > 2]] {a, c}
Svar
Du bruker et PositionIndex
med KeySelect
for dette, som er en god tilnærming hvis du trenger å bruke flere tester mot samme matrise.
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 ikke ' ikke
PositionIndex
! - @Pillsy takk for at du introduserte
PositionIndex
for meg +1 🙂
Svar
Bare for litt latterlighet (som dekker noen av svarene):
t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0};
Forskjellige:
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[]
er helt passende:Pick[T, Positive[Ctl]]
.Ctl
>2
?T
medRange[Length[T]]
, eller noe sånt …Position[]
er også nyttig:Position[Ctl, x_ /; x > 2]
.