欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

numpy中的nan和inf,及其批量判別、替換方式

 更新時(shí)間:2024年09月10日 14:53:30   作者:domodo2012  
在Numpy中,NaN表示非數(shù)值,Inf表示無窮大,NaN與任何值計(jì)算都是NaN,Inf與0相乘是NaN,其余情況下與Inf運(yùn)算仍為Inf,可以使用np.isnan(), np.isinf(), np.isneginf(), np.isposinf(), np.isfinite()等函數(shù)進(jìn)行批量判別,返回布爾值數(shù)組

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è)元素是否為 nan
  • np.isinf():批量判別數(shù)組中每個(gè)元素是否為 inf
  • np.isneginf():批量判別數(shù)組中每個(gè)元素是否為 +inf
  • np.isposinf(): 批量判別數(shù)組中每個(gè)元素是否為 -inf
  • np.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)文章

  • python上selenium的彈框操作實(shí)現(xiàn)

    python上selenium的彈框操作實(shí)現(xiàn)

    這篇文章主要介紹了python上selenium的彈框操作實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python使用import導(dǎo)入本地腳本及導(dǎo)入模塊的技巧總結(jié)

    Python使用import導(dǎo)入本地腳本及導(dǎo)入模塊的技巧總結(jié)

    這篇文章主要介紹了Python使用import導(dǎo)入本地腳本及導(dǎo)入模塊的技巧,結(jié)合實(shí)例形式總結(jié)分析了Python使用import導(dǎo)入本地腳本及導(dǎo)入模塊的使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • python基礎(chǔ)之變量和數(shù)據(jù)類型

    python基礎(chǔ)之變量和數(shù)據(jù)類型

    這篇文章主要介紹了python的變量和數(shù)據(jù)類型,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • python with (as)語句實(shí)例詳解

    python with (as)語句實(shí)例詳解

    這篇文章主要介紹了python with (as)語句實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python找出完數(shù)的方法

    python找出完數(shù)的方法

    今天小編就為大家分享一篇python找出完數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • flask中使用SQLAlchemy進(jìn)行輔助開發(fā)的代碼

    flask中使用SQLAlchemy進(jìn)行輔助開發(fā)的代碼

    在Web.py, Django, Flask, Tornado里,自帶的ORM功能比較缺乏,推薦大家使用SQLAlchemy來輔助開發(fā)
    2013-02-02
  • python統(tǒng)計(jì)日志ip訪問數(shù)的方法

    python統(tǒng)計(jì)日志ip訪問數(shù)的方法

    這篇文章主要介紹了python統(tǒng)計(jì)日志ip訪問數(shù)的方法,涉及Python操作日志文件及正則匹配的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-07-07
  • 關(guān)于python?DataFrame的合并方法總結(jié)

    關(guān)于python?DataFrame的合并方法總結(jié)

    這篇文章主要介紹了關(guān)于python?DataFrame的合并方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python實(shí)現(xiàn)Excel文件的合并(以新冠疫情數(shù)據(jù)為例)

    Python實(shí)現(xiàn)Excel文件的合并(以新冠疫情數(shù)據(jù)為例)

    這篇將以新冠疫情數(shù)據(jù)為例,詳細(xì)介紹了如何利用Python實(shí)現(xiàn)合并Excel文件,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-03-03
  • Pycharm的Available Packages為空的解決方法

    Pycharm的Available Packages為空的解決方法

    這篇文章主要介紹了Pycharm的Available Packages為空的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論