删除 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))]
我有两个包含 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))]