理解np.nonzero()函数


 

举三个例子,就能清楚的看到 np.nonzero() 这个函数返回值的意义


 

一、

#例1 一维数组
import numpy as np

a = [0,1,2,0,3,0]
b = np.nonzero(a)
print(b)

 

输出: (array([1, 2, 4], dtype=int64),)

nonzero()用于得到数组中非零元素的位置(数组索引),如上例中数组a中索引1,2,4中的元素不为0,即返回值


 

 二、

#例2 二维数组
import numpy as np
a =[[1,2,3],
    [0,2,0],
    [0,2,2]]  

b = nonzero(a)
print(b)

 

输出:(array([0, 0, 0, 1, 2, 2], dtype=int64), array([0, 1, 2, 1, 1, 2], dtype=int64))

  先看一下输出的内容(格式),它输出了二个array数组,刚好对应了二维数组的二,每一个数组对应了数组a的一个维度,也是说在每个数组中挑出对应的数字组成一个坐标,就可以找到数组a中非0元素。比如说从 输出的第一个数组 [0, 0, 0, 1, 2, 2]中选第一个数字0和第二个数组 [0, 1, 2, 1, 1, 2] 也选出对应的数字0,就组成了一个位置坐标[0,0](也即 [0][0] ),意味着数组a中第0行,第0列的位置是非0元素,其余类推。两个数组分别选出一个数字就对应了6个位置,即 [0][0] ,[0][1],[0][2],[1][1],[2][1],[2][2],这些就是数组a中的非0位置对应的索引信息,可以通过如a[0][0], a[0][1]等取出。

  哎,现在是不是发现了,a中元素非0元素的个数和输出的每一个数组的长度是一样的。如果现在懂了一点,猜测一下nonzero()三维和高维数组的输出结果。


 

三、

# 例三 三维数组
import numpy as np
a =[[[1,2,3],
     [1,0,1]],
    [[0,2,0],
     [1,1,0]],
    [[0,2,2],
     [0,9,8]]]

b = nonzero(a)
print(b)
输出: (array([0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1], dtype=int64), array([0, 1, 2, 0, 2, 1, 0, 1, 1, 2, 1, 2], dtype=int64))

在输出的三个array数组中分别选出对应的位置组成a中非0位置的索引,即 [ 0 ][ 0 ][ 0 ],[ 0 ][ 0 ][ 1 ],[ 0 ][ 0 ][ 2 ],[ 0 ][ 1 ][ 0 ]等。

 

 

 

 
上一篇:Bloom Filter


下一篇:数据竞赛实战(4)——交通事故理赔审核