NumPy ma wydajną funkcję / metodę nonzero()
identyfikacji indeksów niezerowych elementów w ndarray
obiekcie. Jaki jest najbardziej efektywny sposób uzyskania indeksów elementów, które mają wartość zero?
144
numpy.where () jest moim ulubionym.
>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8])
>>> numpy.where(x == 0)[0]
array([1, 3, 5])
where()
zwraca krotkę?numpy.where(x == 0)[1]
jest poza granicami. jaka jest wtedy tablica indeksów?np.zeros((3,))
do tworzenia wektorów o długości 3. Podejrzewam, że ma to na celu ułatwienie analizowania parametrów. W przeciwnym razie implementacja czegoś takiego jaknp.zeros(3,0,dtype='int16')
versusnp.zeros(3,3,3,dtype='int16')
byłaby denerwująca.where
zwraca krotkęndarray
s, z których każda odpowiada wymiarowi danych wejściowych. w tym przypadku wejście jest tablicą, więc wyjście to1-tuple
. Gdyby x było matrycą, byłoby to2-tuple
i tak dalejnumpy.where
specjalnie zaleca używanienumpy.nonzero
bezpośrednio zamiast wywoływaniawhere
tylko z jednym argumentem.Jest
np.argwhere
,która zwraca wszystkie znalezione indeksy jako wiersze:
źródło
Możesz szukać dowolnego warunku skalarnego za pomocą:
Co zwróci tablicę jako maskę logiczną warunku.
źródło
a[a==0] = epsilon
Możesz również użyć
nonzero()
go na masce logicznej warunku, ponieważFalse
jest to również rodzaj zera.Działa dokładnie tak samo, jak
mtrw
sposób, ale jest bardziej związany z pytaniem;)źródło
nonzero
metody do sprawdzenia warunków.Możesz użyć numpy.nonzero, aby znaleźć zero.
źródło
Jeśli pracujesz z tablicą jednowymiarową, istnieje cukier składniowy:
źródło
numpy.flatnonzero(numpy.logical_or(numpy.logical_or(x==0, x==2), x==7))
źródło
Zrobiłbym to w następujący sposób:
źródło