我必须从两个数组中删除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)
我需要这个才能正确获取统计数据和图表
答案 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)
测试元素的有限性(不是无穷大或不是数字)。
答案 2 :(得分:1)
对我来说很好。
我以此创建它来解决合并NaN和掩码数组的问题:
masked_red_diff = masked_red_diff[np.isfinite(masked_red_diff)]
masked_red_diff.mean()