numpy.nonzero(a)
返回非零元素的索引。
返回一个数组元组,每个维度对应一个数组,包含该维度中非零元素的索引。可以通过以下方式获得相应的非零值:
a[nonzero(a)]
要按元素而不是维度对索引进行分组,请使用:
transpose(nonzero(a))
结果总是一个二维数组,每个非零元素都有一行。
参数: | a:array_like |
输入数组 | |
返回: | tuple_of_arrays:元组 |
非零元素的指数 |
Example:
对于一维布尔数组b1,nonzero(b1)所得到的是一个长度为1的元组,它表示b1[0]和b1[2]位置的值不为0(False)。
b1 = np.array([True, False, True, False])
b1
array([ True, False, True, False], dtype=bool)
np.nonzero(b1)
(array([0, 2], dtype=int64),)
对于二维数组b2,nonzero(b2)所得到的是一个长度为2的元组。
b2 = np.array([[True, False, True], [True, False, False]])
b2
array([[ True, False, True],
[ True, False, False]], dtype=bool)
np.nonzero(b2)
(array([0, 0, 1], dtype=int64), array([0, 2, 0], dtype=int64))
因此结果可知b2[0,0]、b2[0,2]、b2[1,0]的值不为0:
b2[0,0],b2[0,2],b2[1,0]
(True, True, True)
对于多维数组,情况跟二维数组类似:
b3 = np.array([[1,0,0], [0,2,0], [1,1,0]])
b3
array([[1, 0, 0],
[0, 2, 0],
[1, 1, 0]])
np.nonzero(x)
(array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
transpose可以按元素直接对索引进行分组:
x[np.nonzero(x)]
array([1, 2, 1, 1])
np.transpose(np.nonzero(x))
array([[0, 0],
[1, 1],
[2, 0],
[2, 1]], dtype=int64)
常见的用途nonzero
是查找数组的索引,其中条件为True。给定数组a,条件a > 3是布尔数组,并且因为False被解释为0,所以np.nonzero(a> 3)产生条件为真的a的索引。
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
a>3
array([[False, False, False],
[ True, True, True],
[ True, True, True]], dtype=bool)
np.nonzero(a > 3)
(array([1, 1, 1, 2, 2, 2], dtype=int64),array([0, 1, 2, 0, 1, 2], dtype=int64))
nonzero
也可以调用布尔数组的方法。
(a > 3).nonzero()
(array([1, 1, 1, 2, 2, 2], dtype=int64),array([0, 1, 2, 0, 1, 2], dtype=int64))