numpy中的nan和inf,及其批量判別、替換方式
1、概念
nan:not a number (非數(shù)值)inf:infinity (inf:正無窮,-inf:負(fù)無窮 ),下文中的 inf 包含了兩種無窮numpy 中,nan 和 inf 的類型都是 float 。
2、性質(zhì)
2-1、多個(gè) nan 之間的比較,地址相等,值不相等
import numpy as np
print(f'nan 之間的值比較 {np.nan == np.nan}')
print(f'nan 之間的地址比較 {np.nan is np.nan}')Out[18]: nan 之間的值比較 False nan 之間的地址比較 True
2-2、nan 與任何值的計(jì)算,結(jié)果都是 nan
2-3、多個(gè) inf 之間的比較,地址相等,值相等
print(f'inf 之間的值比較 {np.inf == np.inf}')
print(f'inf 之間的地址比較 {np.inf is np.inf}')Out[19]: inf 之間的值比較 True inf 之間的地址比較 True
2-4、0乘以 inf 結(jié)果是 nan,其他與 inf 做的簡單加、乘運(yùn)算,結(jié)果都是 inf
In[20]: 0 * np.inf Out[20]: nan
In[21]: 2341 * np.inf Out[21]: inf In[22]: -241 + np.inf Out[21]: inf
2-5、inf 外的其他數(shù)除以 inf,結(jié)果是0,inf 除以 inf,結(jié)果是 nan
In[22]: 894 / np.inf Out[22]: 0.0 In[23]: np.inf / np.inf Out[23]: nan
2-6、所有數(shù)都比 -inf 大 所有數(shù)都比 +inf 小,+inf 和 +inf 相等,-inf 和 -inf 相等
In[24]: 1.0e-28 > -np.inf Out[24]: True In[25]: 1.e+43 < np.inf Out[25]: True In[26]: np.inf == np.inf True In[27]: -np.inf == -np.inf Out[27]: True
3、數(shù)組中 nan、inf 的批量判別
np.isnan():批量判別數(shù)組中每個(gè)元素是否為 nannp.isinf():批量判別數(shù)組中每個(gè)元素是否為 infnp.isneginf():批量判別數(shù)組中每個(gè)元素是否為 +infnp.isposinf(): 批量判別數(shù)組中每個(gè)元素是否為 -infnp.isfinite():批量判別數(shù)組中每個(gè)元素是否為非 inf 非 nan 的值
以上的返回值都是與被判別數(shù)組同維度的 bool 值數(shù)組
In[30]: a1 = np.array([[1, np.nan, np.inf], [np.nan, -np.inf, -0.25]]) print(a1) print(np.isfinite(a1)
Out[30]:
array([[ 1. , nan, inf],
[ nan, -inf, -0.25]])
array([[ True, False, False],
[False, False, True]])4、數(shù)組中 nan、inf 的批量替換
4-1、數(shù)組中 nan、inf 值的批量替換
In[31]:
a = np.array([[np.nan, np.nan, 1, 2], [np.inf, np.inf, 3, 4], [1, 1, 1, 1], [2, 2, 2, 2]])
print('替換前')
print (a)
where_are_nan = np.isnan(a)
where_are_inf = np.isinf(a)
#nan替換成0,inf替換成nan
a[where_are_nan] = 0
a[where_are_inf] = np.nan
print('替換后')
print(a)Out[31]: 替換前 [[nan nan 1. 2.] [inf inf 3. 4.] [ 1. 1. 1. 1.] [ 2. 2. 2. 2.]] 替換后 [[ 0. 0. 1. 2.] [nan nan 3. 4.] [ 1. 1. 1. 1.] [ 2. 2. 2. 2.]]
4-2、nan值替換成每列的均值
In[32]:
def fill_ndarray(t1):
for i in range(t1.shape[1]): # 遍歷每一列(每一列中的nan替換成該列的均值)
temp_col = t1[:, i] # 當(dāng)前的一列
nan_num = np.count_nonzero(temp_col != temp_col)
if nan_num != 0: # 不為0,說明當(dāng)前這一列中有nan
temp_not_nan_col = temp_col[temp_col == temp_col] # 去掉nan的ndarray
# 選中當(dāng)前為nan的位置,把值賦值為不為nan的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean() # mean()表示求均值。
return t1
if __name__ == '__main__':
t1 = np.array([[ 0., 1., 2., 3., 4., 5.],
[ 6., 7., np.nan, np.nan, np.nan, np.nan],
[12., 13., 14., 15., 16., 17.],
[18., 19., 20., 21., 22., 23.]])
print('替換前')
print(t1)
t1 = fill_ndarray(t1) # 將nan替換成對(duì)應(yīng)的均值
print('替換后')
print(t1)Out[32]: 替換前 [[ 0. 1. 2. 3. 4. 5.] [ 6. 7. nan nan nan nan] [12. 13. 14. 15. 16. 17.] [18. 19. 20. 21. 22. 23.]] 替換后 [[ 0. 1. 2. 3. 4. 5.] [ 6. 7. 12. 13. 14. 15.] [12. 13. 14. 15. 16. 17.] [18. 19. 20. 21. 22. 23.]]
替換成行均值的類似處理即可。
4-3、inf替換成每列的均值
先把所有 inf 都換成 nan,之后參照 3-2 處理即可。
4-4、numpy.nan_to_num(x)
使用說明:用 0 代替數(shù)組 x 中的 nan,用有限值代替 inf
In[33]: a = np.array([[np.nan,np.inf], [-np.nan,-np.inf]]) np.nan_to_num(a)
Out[33]:
array([[ 0.00000000e+000, 1.79769313e+308],
[ 0.00000000e+000, -1.79769313e+308]])總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django 使用Ajax進(jìn)行前后臺(tái)交互的示例講解
今天小編就為大家分享一篇Django 使用Ajax進(jìn)行前后臺(tái)交互的示例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Python爬蟲實(shí)現(xiàn)百度翻譯功能過程詳解
這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)百度翻譯功能過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
利用python清除移動(dòng)硬盤中的臨時(shí)文件
本篇文章的目的是在移動(dòng)硬盤插入到電腦的同時(shí),利用Python自動(dòng)化和Windows服務(wù)刪除掉這些臨時(shí)文件。感興趣的朋友可以了解下2020-10-10
Python 安裝setuptools和pip工具操作方法(必看)
下面小編就為大家?guī)硪黄狿ython 安裝setuptools和pip工具操作方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Python函數(shù)進(jìn)階之位置參數(shù)與關(guān)鍵字參數(shù)的使用教學(xué)
本文為大家深入講解了Python函數(shù)中位置參數(shù)與關(guān)鍵字參數(shù)的使用核心概念與實(shí)踐方法,文中的示例代碼講解詳細(xì),希望可以幫助大家掌握關(guān)鍵技術(shù)要點(diǎn)并了解實(shí)際應(yīng)用場景與最佳實(shí)踐2026-05-05
基于tensorflow __init__、build 和call的使用小結(jié)
這篇文章主要介紹了基于tensorflow __init__、build 和call的使用小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
使用python求斐波那契數(shù)列中第n個(gè)數(shù)的值示例代碼
這篇文章主要給大家介紹了關(guān)于使用python求斐波那契數(shù)列中第n個(gè)數(shù)的值的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

