簡體   English   中英

numpy數組過濾器並替換

[英]numpy array filter and replace

我有一個數組

a = np.array([1,2,3,4,np.nan])

我想用np.nan替換所有小於1.5的np.nan ,即我想

a = np.array([np.nan,2,3,4,np.nan])

我怎么做?

我做了

 a[a<1.5] = np.nan

我在IPython(Py3.4) RuntimeWarning: invalid value encountered in less收到以下運行時警告錯誤RuntimeWarning: invalid value encountered in less 這是因為我的列表中np.nan嗎? 我有什么辦法可以防止這種情況發生?

還有一種無需分配就可以內聯的方式嗎? 而不是做

a[a<1.5]=np.nan 
return a 

我可以做

 return a... 

....是需要填寫的地方。

這是[ RuntimeWarning ],因為我的列表包含np.nan嗎?

是。

我有什么辦法可以防止這種情況發生?

就您而言,可以安全地忽略此警告。 為了避免意外刪除無關的警告,請不要在上下文管理器中放入除顯示的那一行以外的任何內容

>>> import numpy as np
>>> a = np.array([1,2,3,4,np.nan])
>>> with np.errstate(invalid='ignore'):
...     a[a<1.5] = np.nan
...     
>>> a
array([ nan,   2.,   3.,   4.,  nan])

這是就地操作,此處未創建副本。 要返回副本,與原來的a修改,喜歡蒙面陣列的方法

另一種選擇可讓您根據需要進入return語句:

mask = ~np.isnan(a)
mask[mask] &= a[mask] < 1.5
return np.where(mask, np.nan, a)

例:

def ma_lessthan(arr, num):
    mask = ~np.isnan(arr)
    mask[mask] &= arr[mask] < num
    return np.where(mask, np.nan, arr)

print(ma_lessthan(a, 1.5))
[ nan   2.   3.   4.  nan]

mask 致謝@Jaime

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM