Como extrair linhas em uma matriz, que contêm um determinado valor? (Numpy, Scipy)

StackOverflow https://stackoverflow.com/questions/4239586

  •  26-09-2019
  •  | 
  •  

Pergunta

Eu tenho uma matriz 2D Numpy e quero que ela retorne coloumn c onde (r, c-1) (linha r, coloumn c) é igual a um determinado valor (int n).

Eu não quero iterar sobre as fileiras escrevendo algo como

for r in len(rows):  
  if array[r, c-1] == 1:
    store array[r,c]

, porque existem 4000 deles e essa matriz 2D é apenas uma das 20, tenho que parecer com a calha.

Encontrei "filtro", mas não sei como usá -lo (não encontrei nenhum doc).

Existe uma função, que fornece essa pesquisa?

Foi útil?

Solução

Espero entender sua pergunta corretamente. Digamos que você tenha uma matriz a

a = array(range(7)*3).reshape(7, 3)
print a
array([[0, 1, 2],
       [3, 4, 5],
       [6, 0, 1],
       [2, 3, 4],
       [5, 6, 0],
       [1, 2, 3],
       [4, 5, 6]])

E você deseja extrair todas as linhas onde a primeira entrada é 2. Isso pode ser feito assim:

print a[a[:,0] == 2]
array([[2, 3, 4]])

a[:,0] indica a primeira coluna da matriz, == 2 Retorna uma matriz booleana marcando as entradas que correspondem e depois usamos indexação avançada Para extrair as respectivas linhas.

Obviamente, Numpy precisa iterar em todas as entradas, mas isso será muito mais rápido do que fazê -lo em Python.

Outras dicas

Matrizes Numpy não são indexadas. Se você precisar executar esta operação específica de maneira mais eficaz do que linear no tamanho da matriz, precisará usar algo diferente do Numpy.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top