为数组中的nan和inf值创建一个掩码

时间:2018-06-15 13:16:02

标签: python numpy nan

我必须从两个数组中删除nan和inf值。 我发现这篇文章对于删除nan非常有用https://stackoverflow.com/a/48591908/7541421。当我可以创建一个掩码去除nan和inf值时,有没有类似的解决方案?

下面的例子只是说明性的,我有大尺寸的数组(400个元素)

import numpy as np
from numpy import nan, inf

a = np.asarray([0.5, 6.2, np.nan, 4.5, np.inf])
b = np.asarray([np.inf, np.inf, 0.3, np.nan, 0.5])

bad = ~np.logical_or(np.isnan(a), np.isnan(b))

X = np.compress(bad, a)  
Y = np.compress(bad, b) 

BIAS = np.nanmean(X - Y)
RMSE = np.sqrt(np.nanmean((X - Y)**2))
CORR = np.corrcoef(X, Y)

我需要这个才能正确获取统计数据和图表

3 个答案:

答案 0 :(得分:9)

您可以使用np.isfinite()。它将返回一个带有True的布尔掩码,只要值既不是无穷也不是NAN。

您可以通过这种方式获得有限值:

a = np.asarray(a)
a = a[np.isfinite(a)]

或两个阵列在一起:

mask = np.isfinite(a) | np.isfinite(b)
a = a[mask]
b = b[mask]

答案 1 :(得分:3)

np.isfinite

  

测试元素的有限性(不是无穷大或不是数字)。

答案 2 :(得分:1)

对我来说很好。

我以此创建它来解决合并NaN和掩码数组的问题:

masked_red_diff = masked_red_diff[np.isfinite(masked_red_diff)]
masked_red_diff.mean()