簡體   English   中英

Python Numpy面具NaN無法正常工作

[英]Python Numpy mask NaN not working

我只是想使用一個蒙面數組來過濾掉一些nan條目。

import numpy as np
# x = [nan, -0.35, nan]
x = np.ma.masked_equal(x, np.nan)
print x

這輸出如下:

masked_array(data = [        nan -0.33557216         nan],
         mask = False,
   fill_value = nan)

x上調用np.isnan()返回正確的布爾數組,但掩碼似乎不起作用。 為什么我的面具不能像我期望的那樣工作?

您可以使用np.ma.masked_invalid

import numpy as np

x = [np.nan, 3.14, np.nan]
mx = np.ma.masked_invalid(x)

print(repr(mx))
# masked_array(data = [-- 3.14 --],
#              mask = [ True False  True],
#        fill_value = 1e+20)

或者,使用np.isnan(x)作為mask=參數np.ma.masked_array

print(repr(np.ma.masked_array(x, np.isnan(x))))
# masked_array(data = [-- 3.14 --],
#              mask = [ True False  True],
#        fill_value = 1e+20)

為什么原始方法不起作用? 因為,相反違反直覺, NaN不等於NaN

print(np.nan == np.nan)
# False

這實際上NaN的IEEE-754定義的一部分

這是另一種不使用面具的替代方案:

import numpy as np
#x = [nan, -0.35, nan]
xmask=x[np.logical_not(np.isnan(x))]
print(xmask)

結果:

array([-0.35])

暫無
暫無

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

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