如何在含NaN的NumPy数组中保留NaN并筛选正负元素?
解决NumPy数组中保留NaN值的问题
原代码中,当数组包含NaN时,由于NaN与任何数值比较都会返回False,所以np.where会触发else分支将NaN替换为0,不符合保留NaN的需求。以下是两种可行的修改方案:
方案一:嵌套np.where判断
先优先识别NaN值并保留,再处理正负数值的筛选:
import numpy as np delta_up = np.where(np.isnan(delta), delta, np.where(delta > 0, delta, 0)) delta_down = np.where(np.isnan(delta), delta, np.where(delta < 0, delta, 0))
方案二:使用np.select多条件判断
通过多条件列表明确优先级,逻辑更直观:
import numpy as np # 生成delta_up:保留NaN和正数,其余设为0 conditions_up = [np.isnan(delta), delta > 0] choices_up = [delta, delta] delta_up = np.select(conditions_up, choices_up, default=0) # 生成delta_down:保留NaN和负数,其余设为0 conditions_down = [np.isnan(delta), delta < 0] choices_down = [delta, delta] delta_down = np.select(conditions_down, choices_down, default=0)
两种方案的核心逻辑一致:先判断是否为NaN,满足则保留原数组值;再判断数值正负,满足则保留;最后将不满足条件的元素设为0。
内容的提问来源于stack exchange,提问作者SebastianHeeg
相关产品推荐
相关产品推荐

