numpy.ma.MaskedArray.nonzero#

方法

ma.MaskedArray.nonzero()[原始碼]#

傳回非遮罩且非零元素的索引。

傳回陣列的元組,每個維度一個,其中包含該維度中非零元素的索引。對應的非零值可以使用以下方式取得

a[a.nonzero()]

若要依元素而非維度對索引進行分組,請改用

np.transpose(a.nonzero())

此結果永遠是二維陣列,每個非零元素都有一列。

參數:
傳回:
tuple_of_arraystuple

非零元素的索引。

參見

numpy.nonzero

對 ndarray 進行操作的函數。

flatnonzero

傳回輸入陣列扁平化版本中非零元素的索引。

numpy.ndarray.nonzero

等效的 ndarray 方法。

count_nonzero

計算輸入陣列中非零元素的數量。

範例

>>> import numpy as np
>>> 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 中條件為 true 的索引。

>>> 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]))