首页 > 技术文章 > numpy nonzero与isnan

cymwill 2018-01-16 20:47 原文

nonzero

直接看例子:

In [83]: x = np.array([[1,0,0], [0,2,0], [1,1,0]])

In [84]: x.shape
Out[84]: (3L, 3L)
# 3*3的array,维度为2

In [85]: x
Out[85]:
array([[1, 0, 0],
       [0, 2, 0],
       [1, 1, 0]])

In [86]: np.nonzero(x)
Out[86]: (array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
# 返回的是x中的不为0的元素坐标(坐标从每个array中选一个组成)
# 返回的tuple与x的维度相同,tuple中第一个元素选一个,第二个元素选对应的那个,形成了一个坐标: # x[0,0], x[1,1], x[2,0], x[2,1] 这几个为非零
In [87]: x = x == 0

In [88]: x
Out[88]:
array([[False,  True,  True],
       [ True, False,  True],
       [False, False,  True]], dtype=bool)


In [89]: np.nonzero(x)
Out[89]: (array([0, 0, 1, 1, 2], dtype=int64), array([1, 2, 0, 2, 2], dtype=int64))
# 看第一个元素x[0,1]是True,意味着false在这个函数这为0

 

isnan:

In [90]: y = [np.log(-1.),1.,np.log(0)]
E:\Anaconda2\Scripts\ipython-script.py:1: RuntimeWarning: invalid value encountered in log
  if __name__ == '__main__':
E:\Anaconda2\Scripts\ipython-script.py:1: RuntimeWarning: divide by zero encountered in log
  if __name__ == '__main__':

In [91]: y
Out[91]: [nan, 1.0, -inf]

In [92]: np.isnan(y)
Out[92]: array([ True, False, False], dtype=bool)
# 可以看到isnan返回的是数组对应的相同大小的布尔型数组

 

推荐阅读