NumPy имеет эффективную функцию/метод nonzero()
, чтобы идентифицировать индексы ненулевых элементов в объекте ndarray
. Каков наиболее эффективный способ получить индексы элементов, которые do имеют значение 0?Найти индексы элементов, равные нулю в массиве NumPy
ответ
numpy.where() - мой любимый.
>>> 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)
Который воздаст массив как булевой маска состояния.
Вы можете использовать это для доступа к нулевым элементам: 'a [a == 0] = epsilon' –
Если вы работаете с одномерным массивом существует синтаксический сахар:
>>> x = numpy.array([1,0,2,0,3,0,4,5,6,7,8])
>>> numpy.flatnonzero(x == 0)
array([1, 3, 5])
Это работает отлично, пока у меня есть только одно условие. Что делать, если я хочу найти «x == numpy.array (0,2,7)»? Результатом должен быть массив ([1,2,3,5,9]). Но как я могу это получить? – MoTSCHIGGE
Вы можете сделать это с помощью: 'numpy.flatnonzero (numpy.logical_or (numpy.logical_or (x == 0, x == 2), x == 7))' – Dusch
Вы также можете использовать 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
«s, но в большей степени связана с вопросом;)
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)
Существует 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)
- 1. Найти индексы в многомерном Numpy массиве
- 2. Как найти части элементов в массиве NumPy
- 3. Найти все индексы максимальных элементов в массиве
- 4. Порядок элементов в массиве numpy
- 5. Найти индексы строк х попадают в в Numpy массиве
- 6. Как найти индексы в массиве numpy, которые удовлетворяют нескольким условиям?
- 7. Найти индексы значений, удовлетворяющих условию в массиве 2d numpy
- 8. Самый быстрый способ найти индексы состояния в массиве numpy
- 9. Найти индексы определенных строк в массиве 3d numpy
- 10. Как найти сумму двух элементов в массиве, ближайшем к нулю
- 11. Дублирование элементов в Numpy массиве
- 12. Найти несколько значений в массиве Numpy
- 13. Найти равные значения в массиве объектов
- 14. Найти числа, равные сумме в массиве
- 15. Найти индексы элементов в списке
- 16. Numpy Array: эффективно найти подходящие индексы
- 17. Как получить индексы значений Numpy массива, которые равны нулю
- 18. Найти последовательные в массиве numpy
- 19. Возвращает индексы подматрицы в массиве
- 20. быстрый способ найти наибольшее N элементов в массиве Numpy
- 21. Найти n наименьших элементов в массиве массивов numpy
- 22. Найти индексы столбцов, имеющих некоторый ненулевой элемент в массиве 2d
- 23. Индексы минимальных/максимальных элементов в массиве 4D
- 24. Верните все индексы совпадающих элементов в массиве
- 25. получить индексы n наименьших элементов в массиве
- 26. Как получить индексы недиагональных элементов массива numpy?
- 27. Поиск элементов в массиве numpy с несколькими критериями
- 28. Разделите два значения, равные нулю
- 29. Найти сумму в массиве, равным нулю
- 30. Поиск смежных элементов в массиве 1D numpy
Я пытаюсь вспомнить Python. Почему 'where()' возвращает кортеж? 'numpy.where (x == 0) [1]' выходит за пределы. что такое индексный массив, связанный с этим? – Rhubarb
@ Zhubarb - Большинство применений индексов - это кортежи - 'np.zeros ((3,))', например, для создания трехмерного вектора. Я подозреваю, что это легко сделать синтаксический анализ параметров. В противном случае что-то вроде 'np.zeros (3,0, dtype = 'int16')' versus 'np.zeros (3,3,3, dtype = 'int16')' будет раздражать для реализации. – mtrw
№. 'where' возвращает кортеж' ndarray', каждый из которых соответствует размеру ввода. в этом случае вход представляет собой массив, поэтому выход представляет собой «1-кортеж». Если x была матрицей, это было бы «2-tuple» и т. Д. –