終了この質問は
オフトピック。現在、回答を受け付けていません。
コメント
回答
Position
を使用して、指定した間隔ですべての値の配列内の位置/インデックスを見つけることができます(Matlabの検索など)。例:
pos = Position[a, _?((0.3 < # < 0.7) &)]
または
pos = Position[a, x_ /; (0.3 < x < 0.7)]
これらは、の値は0.3〜0.7です。要素はa
から
Extract[a, pos]
を使用して抽出できます。リクエストされた例の場合:
t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0}; pos = Position[ctl, _?((# > 2) &)] Extract[t, pos] {{1}, {3}} {a, c}
コメントでJMが提案しているように、Pick
を使用することもできます:
Pick[t, Thread[ctl > 2]] {a, c}
回答
KeySelect
<でPositionIndex
を使用します/ div>これは、同じ配列に対して複数のテストを使用する必要がある場合に適したアプローチです。
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}
コメント
回答
ちょっとばかげたこと(回答の一部をカバー):
t = {a, b, c, d, e}; ctl = {2.3, 0, 5, 0, 0};
さまざま:
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]