Inicializamos uma matriz numpy com zeros conforme abaixo:
np.zeros((N,N+1))
Mas como verificamos se todos os elementos em uma determinada matriz n * n numpy array são zero.
O método só precisa retornar um True se todos os valores forem realmente zero.
not np.count_nonzero(np.eye(4))
de retornarTrue
apenas se todos os valores forem 0.As outras respostas postadas aqui funcionarão, mas a função mais clara e eficiente de usar é
numpy.any()
:ou
numpy.all(a==0)
porque usa menos RAM. (Não requer a matriz temporária criada peloa==0
termo.)Além disso, é mais rápido do quenumpy.count_nonzero(a)
porque pode retornar imediatamente quando o primeiro elemento diferente de zero for encontrado.np.any()
não usa mais a lógica de "curto-circuito", então você não verá um benefício de velocidade para pequenos arrays.fonte
any
eall
fazer não curto-circuito. Eu acredito que eles são açúcar paralogical_or.reduce
elogical_and.reduce
. Compare um ao outro e meu curto-circuitois_in
:all_false = np.zeros(10**8)
all_true = np.ones(10**8)
%timeit np.any(all_false) 91.5 ms ± 1.82 ms per loop
%timeit np.any(all_true) 93.7 ms ± 6.16 ms per loop
%timeit is_in(1, all_true) 293 ns ± 1.65 ns per loop
Eu usaria np.all aqui, se você tiver uma matriz a:
fonte
np.all(a==a[0])
. Muito obrigado!Como outra resposta diz, você pode tirar proveito de avaliações verdadeiras / falsas se souber que esse
0
é o único elemento falso possivelmente em seu array. Todos os elementos em uma matriz são falsos se não houver elementos verdadeiros nela. *No entanto, a resposta alegou que
any
foi mais rápido do que outras opções devido em parte ao curto-circuito. Em 2018, Numpy'sall
eany
não curto-circuite .Se você faz esse tipo de coisa com frequência, é muito fácil fazer suas próprias versões de curto-circuito usando
numba
:Eles tendem a ser mais rápidos do que as versões do Numpy, mesmo quando não estão em curto-circuito.
count_nonzero
é o mais lento.Algumas informações para verificar o desempenho:
Verifica:
* Útil
all
eany
equivalências:fonte
Se você estiver testando todos os zeros para evitar um aviso em outra função numpy, tente quebrar a linha em uma tentativa, exceto o bloco que evitará ter que fazer o teste para zeros antes da operação em que você está interessado, ou seja,
fonte