Spec-Zone.ru › NumPy 1.20

numpy.ma.MaskedArray.nonzero

метод

ma.MaskedArray.nonzero() [source]

Возвращает индексы элементов, не являющихся масками и не равных нулю.

Возвращает кортеж массивов, по одному для каждой размерности, содержащий индексы элементов, отличных от нуля в этой размерности. Соответствующие значения, отличные от нуля, можно получить с помощью:

a[a.nonzero()]

Для группировки индексов по элементу, а не по размерности, используйте:

np.transpose(a.nonzero())

Результат всегда является 2D массивом с строкой для каждого элемента, отличного от нуля.

Параметры
None
Возвращает
tuple_of_arraystuple

Индексы элементов, не равных нулю.

См. также

numpy.nonzero

Функция, работающая с массивами nd.

flatnonzero

Возвращает индексы, отличные от нуля, в сплющенной версии входного массива.

numpy.ndarray.nonzero

Эквивалентный метод ndarray.

count_nonzero

Подсчитывает количество элементов, не равных нулю, в входном массиве.

Примеры

>>> import numpy.ma as ma
>>> x = ma.array(np.eye(3))
>>> x
masked_array(
  data=[[1., 0., 0.],
        [0., 1., 0.],
        [0., 0., 1.]],
  mask=False,
  fill_value=1e+20)
>>> x.nonzero()
(array([0, 1, 2]), array([0, 1, 2]))

Элементы с маской игнорируются.

>>> x[1, 1] = ma.masked
>>> x
masked_array(
  data=[[1.0, 0.0, 0.0],
        [0.0, --, 0.0],
        [0.0, 0.0, 1.0]],
  mask=[[False, False, False],
        [False,  True, False],
        [False, False, False]],
  fill_value=1e+20)
>>> x.nonzero()
(array([0, 2]), array([0, 2]))

Индексы также могут быть сгруппированы по элементу.

>>> np.transpose(x.nonzero())
array([[0, 0],
       [2, 2]])

Распространенное применение nonzero — поиск индексов массива, где условие равно True. Учитывая массив a, условие a > 3 — это булев массив, и поскольку False интерпретируется как 0, ma.nonzero(a > 3) возвращает индексы a, где условие истинно.

>>> a = ma.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a > 3
masked_array(
  data=[[False, False, False],
        [ True,  True,  True],
        [ True,  True,  True]],
  mask=False,
  fill_value=True)
>>> ma.nonzero(a > 3)
(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))

Можно также вызвать метод nonzero массива условий.

>>> (a > 3).nonzero()
(array([1, 1, 1, 2, 2, 2]), array([0, 1, 2, 0, 1, 2]))

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.ma.MaskedArray.nonzero.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API