【发布时间】:2021-06-04 10:34:21
【问题描述】:
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 语句)?
【问题讨论】:
-
np.where(np.isnan(a * b), np.nan, a==b)应该比给定的答案更快,因为它避免了不必要的第三次操作。由于NaN乘以任何东西都等于 NaN,我们可以使用乘法而不是最后的or。 -
如果您只关心最终结果中的真假,您可以使用
(a * b) * (a == b)加快速度 -
你能详细说明一下吗?我想在我的数组中有 True-s 和 False-s,而不是浮点数。
-
@zabop 如果你想要
nans那么你必须使用浮点数据类型 -
为什么 nan 的数据类型必须强加于整个数组,为什么我不能有 float nans 和 boolean Trues Falses?