比较NumPy阵列以使NAN产生NAN

2024-09-24 06:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

import numpy as np

我有两个阵列:

a = np.array([1,2,3,np.nan,5])
b = np.array([3,2,np.nan,5,4])

我想比较一下这两个阵列中的元素&;得到一个布尔值列表作为结果。当比较中涉及nan时,我想得到nan。预期结果:

[False, False, nan, nan, True]

我使用if-else involving list comprehension实现了所需的输出:

[eacha>eachb
 if ~np.isnan(eacha) and ~np.isnan(eachb)
 else np.nan
 for eacha, eachb in zip(a,b)]

有没有更好的方法(即不涉及for循环,if-else语句)来实现这一点


Tags: importnumpyfalse元素forifasnp
2条回答

您可以尝试:

np.where(np.isnan(a)|np.isnan(b), np.nan, a==b)

但是你会得到一个浮点数组,因为np.nan是浮点数组:

array([ 0.,  1., nan, nan,  0.])

要将Quang Hoangexcellent answer输出从浮点更改为布尔,我们可以使用pandas.Series.replace

pd.Series(np.where(np.isnan(a)|np.isnan(b), np.nan, a==b)).replace({0:False,1:True}).to_numpy()

导致:

0    False
1     True
2      NaN
3      NaN
4    False
dtype: object

或:

pd.Series(np.where(np.isnan(a)|np.isnan(b), np.nan, a==b)).replace({0:False,1:True}).to_numpy()

导致:

array([False, True, nan, nan, False], dtype=object)

相关问题 更多 >