O NumPy possui a função / método eficiente nonzero()
para identificar os índices de elementos diferentes de zero em um ndarray
objeto. Qual é a maneira mais eficiente para obter os índices dos elementos que fazem tem um valor de zero?
144
where()
retornar uma tupla?numpy.where(x == 0)[1]
está fora dos limites. qual é a matriz de índice acoplada então?np.zeros((3,))
para criar um vetor de três longos, por exemplo. Eu suspeito que isso seja para facilitar a análise dos parâmetros. Caso contrário, algo comonp.zeros(3,0,dtype='int16')
versusnp.zeros(3,3,3,dtype='int16')
seria irritante de implementar.where
retorna uma tupla dendarray
s, cada um deles correspondendo a uma dimensão da entrada. neste caso, a entrada é uma matriz, portanto a saída é a1-tuple
. Se x era uma matriz, seria um2-tuple
, e assim por diantenumpy.where
recomenda especificamente o usonumpy.nonzero
direto em vez de chamarwhere
com apenas um argumento.Tem
np.argwhere
,que retorna todos os índices encontrados como linhas:
fonte
Você pode procurar qualquer condição escalar com:
O que retornará a matriz como uma máscara booleana da condição.
fonte
a[a==0] = epsilon
Você também pode usá-
nonzero()
lo em uma máscara booleana da condição, porqueFalse
também é um tipo de zero.Está fazendo exatamente o mesmo que
mtrw
o jeito que está, mas está mais relacionado à questão;)fonte
nonzero
método para verificar as condições.Você pode usar numpy.nonzero para encontrar zero.
fonte
Se você estiver trabalhando com uma matriz unidimensional, há um açúcar sintático:
fonte
numpy.flatnonzero(numpy.logical_or(numpy.logical_or(x==0, x==2), x==7))
fonte
Eu faria da seguinte maneira:
fonte