Python NaN


NaN, Not a Number, 非數. 它即不是無窮大, 也不是無窮小, 而是python/numpy/... 覺得無法計算時返回的一個符號(自己的推測, 未考證(TODO)).

import numpy as np

無窮大減無窮大會導致NaN

a = np.infty
print a - a
nan
print a * a, a * a - a
inf nan

無窮大乘以0或無窮小或除以無窮大會導致NaN

print a * 0
nan
print a * 1/ a
nan
print a / a
nan
print a / 1
inf
print a / 1
inf

總結起來就是, 涉及到無窮大的四則運算, 若無法確定運算結果仍為無窮大, 那么運算結果就是一個NaN.

另外很明顯的是:

有NaN參與的運算, 其結果也一定是NaN

b = np.nan
print b + 1
nan
print b - b
nan

NaN != NaN

print b == b
False

利用這個性質可以判斷數組中是否含有NaN:

def has_nan(x):
    test = x != x
    return np.sum(test) > 0

也可以使用系統api:

import math
val = float('nan')

if math.isnan(val):
    print('Detected NaN')
    import pdb; pdb.set_trace() # Break into debugger to look around

markdown由jupyter notebook生成. [notebook](https://github.com/dengdan/blog_posts/blob/master/python/NaN.ipynb)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM