numpy nonzero与isnan
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返回的是数组对应的相同大小的布尔型数组