Fechado. Esta pergunta é fora do assunto . Atualmente não está aceitando respostas.

Comentários

  • Sim, Pick[] é totalmente apropriado: Pick[T, Positive[Ctl]].
  • Obrigado! E se eu quisesse saber a posição do elemento de Ctl >2?
  • Substitua T com Range[Length[T]], ou algo assim …
  • Agora que pensei sobre isso, Position[] também é útil: Position[Ctl, x_ /; x > 2].

Resposta

Você pode encontrar a posição / índice dentro de uma matriz de todos os valores em um intervalo especificado, (como Matlab “s find) usando Position. Por exemplo:

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

ou

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

Estes encontram os índices de todos os elementos em a com valores entre 0,3 e 0,7. Os elementos podem ser extraídos de a usando

Extract[a, pos] 

Para o exemplo solicitado:

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

Conforme sugerido por JM nos comentários, você também pode usar Pick:

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

Resposta

Você usa um PositionIndex com KeySelect para isso, que é uma boa abordagem se você precisar usar vários testes no mesmo 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} 

Comentários

  • Não ' sabia PositionIndex!
  • @Pillsy, obrigado por apresentar PositionIndex a mim +1 🙂

Resposta

Apenas para ser ridículo (cobrindo algumas das respostas fornecidas):

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

Vários:

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] 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *