Encontrando instâncias de uma linha específica em um array NumPy de maneira eficiente
Ao trabalhar com arrays NumPy, pode-se encontrar a necessidade de determinar se o array contém uma linha específica, mas o método padrão contains para ndarray levanta questões. Este artigo apresenta soluções eficientes e Pythonic para esse problema.
Uma abordagem envolve converter o array NumPy em uma lista Python usando .tolist() e realizar verificações de associação na lista.
a = np.array([[1,2],[10,20],[100,200]]) [1,2] in a.tolist() # Returns True [1,20] in a.tolist() # Returns False
Outro método é usar uma visualização no array e aplicar a função .all(1) para comparar cada linha com a linha de destino elemento a elemento .
any((a[:]==[1,2]).all(1)) # Returns True any((a[:]==[1,20]).all(1)) # Returns False
Além disso, pode-se gerar na lista NumPy para um potencial aumento de desempenho. No entanto, esta abordagem pode ser ineficiente se um resultado não for encontrado antecipadamente.
any(([1,2] == x).all() for x in a) # Stops on first occurrence
Por último, as funções lógicas do NumPy fornecem uma maneira concisa de realizar comparações.
any(np.equal(a,[1,2]).all(1)) # Returns True
Os resultados do benchmark indicam que as rotinas numpy mantêm uma velocidade de pesquisa consistente, independentemente dos cenários de acerto ou erro. As abordagens de visualização, lógica igual e Python em operador são comparáveis em termos de eficiência, enquanto o gerador sobre NumPy não é recomendado para pesquisas de array completo.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3