Найти индексы элементов, равные нулю в массиве NumPy
NumPy имеет эффективную функцию / метод nonzero() для определения индексов ненулевых элементов в
7 ответов:
numpy.где() - Это мой любимый.
>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8]) >>> numpy.where(x == 0)[0] array([1, 3, 5])
вы можете искать любое скалярное условие с помощью:
>>> a = np.asarray([0,1,2,3,4]) >>> a == 0 # or whatver array([ True, False, False, False, False], dtype=bool)который вернет массив в виде логической маски условия.
здесь
np.argwhere,import numpy as np arr = np.array([[1,2,3], [0, 1, 0], [7, 0, 2]]) np.argwhere(arr == 0)который возвращает все найденные индексы в виде строк:
array([[1, 0], # Indices of the first zero [1, 2], # Indices of the second zero [2, 1]], # Indices of the third zero dtype=int64)
вы также можете использовать
nonzero()используя его на логической маске условия, потому чтоFalseэто тоже своего рода ноль.>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8]) >>> x==0 array([False, True, False, True, False, True, False, False, False, False, False], dtype=bool) >>> numpy.nonzero(x==0)[0] array([1, 3, 5])Он делает точно так же, как
mtrwпуть, но это больше связано с вопросом;)
Если вы работаете с одномерным массивом есть синтаксический сахар:
>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8]) >>> numpy.flatnonzero(x == 0) array([1, 3, 5])
import numpy as np x = np.array([1,0,2,3,6]) non_zero_arr = np.extract(x>0,x) min_index = np.amin(non_zero_arr) min_value = np.argmin(non_zero_arr)
Я бы сделал это следующим образом:
>>> x = np.array([[1,0,0], [0,2,0], [1,1,0]]) >>> x array([[1, 0, 0], [0, 2, 0], [1, 1, 0]]) >>> np.nonzero(x) (array([0, 1, 2, 2]), array([0, 1, 0, 1])) # if you want it in coordinates >>> x[np.nonzero(x)] array([1, 2, 1, 1]) >>> np.transpose(np.nonzero(x)) array([[0, 0], [1, 1], [2, 0], [2, 1])
Comments