首页 > 解决方案 > 为数组中的 nan 和 inf 值创建掩码

问题描述

我必须从两个数组中删除 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)

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

标签: pythonnumpynan

解决方案


您可以使用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]

推荐阅读