Como extrair linhas em uma matriz, que contêm um determinado valor? (Numpy, Scipy)
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?
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.