删除 numpy 数组中的 NaN

Removing NaNs in numpy arrays

我有两个包含 NaN 的 numpy 数组:

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

有没有什么巧妙的方法可以使用 numpy 删除两个数组中的 NaN,并删除另一个列表中相应索引上的内容? 让它看起来像这样:

A = array([  2,   3, ])
B = array([  2,   4, ])

你可以做的是将 2 个数组加在一起,这将用 NaN 值覆盖它们所在的位置 none,然后使用它来生成布尔掩码索引,然后使用索引索引到你的原始 numpy数组:

In [193]:

A = np.array([np.nan,   2,   np.nan,   3,   4])
B = np.array([   1  ,   2,     3   ,   4,  np.nan])
idx = np.where(~np.isnan(A+B))
idx
print(A[idx])
print(B[idx])
[ 2.  3.]
[ 2.  4.]

来自A+B的输出:

In [194]:

A+B
Out[194]:
array([ nan,   4.,  nan,   7.,  nan])

编辑

正如@Oliver W. 正确指出的那样,np.where 是不必要的,因为 np.isnan 将生成一个布尔索引,您可以使用该索引对数组进行索引:

In [199]:

A = np.array([np.nan,   2,   np.nan,   3,   4])
B = np.array([   1  ,   2,     3   ,   4,  np.nan])
idx = (~np.isnan(A+B))
print(A[idx])
print(B[idx])
[ 2.  3.]
[ 2.  4.]

A[~(np.isnan(A) | np.isnan(B))]

B[~(np.isnan(A) | np.isnan(B))]