suljettu. Tämä kysymys on aiheen ulkopuolella . Se ei tällä hetkellä hyväksy vastauksia.

Kommentit

  • Kyllä, Pick[] on täysin sopiva: Pick[T, Positive[Ctl]].
  • Kiitos! Ja jos halusin tietää Ctl >2 -elementin sijainnin?
  • Korvaa T ja Range[Length[T]] tai jotain sellaista …
  • Nyt kun ajattelen sitä, Position[] on myös hyödyllinen: Position[Ctl, x_ /; x > 2].

Vastaa

Löydät sijainnin / hakemiston kaikkien arvojen taulukosta tietyllä aikavälillä (kuten Matlabin löydöt) käyttämällä Position. Esimerkiksi:

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

tai

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

Nämä löytävät kaikkien , joiden arvot ovat välillä 0,3 – 0,7. Elementit voidaan purkaa ryhmästä a käyttämällä

Extract[a, pos] 

Pyydetty esimerkki:

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

Kuten JM ehdotti kommenteissa, voit käyttää myös Pick:

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

Vastaus

Käytät PositionIndex kanssa KeySelect tähän, mikä on hyvä tapa, jos sinun on käytettävä useita testejä samaa taulukkoa vastaan.

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} 

Kommentit

  • En tiedä ' ei tiennyt PositionIndex!
  • @Pillsy kiitos, että otit PositionIndex minulle +1 🙂

vastaus

Vain naurettavuuden vuoksi (joka kattaa osan annetuista vastauksista):

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

Erilaisia:

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] 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *