如何使用NumPy的np.where()函数实现条件替换操作?

2026-05-08 04:142阅读0评论SEO问题
  • 内容介绍
  • 相关推荐

本文共计743个文字,预计阅读时间需要3分钟。

如何使用NumPy的np.where()函数实现条件替换操作?

pythonnp.where(condition, x, y)

看起来像是Python的三元操作符 `x if cond else y`,但它是一种向量化操作。不逐个元素进行条件判断,而是先计算所有 `x` 和 `y` 的值,然后根据 `condition` 的布尔值进行选择。这意味着,如果 `condition` 为 `False`,则输出所有 `x` 的值,否则输出所有 `y` 的值。

  • 如果 x1 / arr,而 arr 含 0,哪怕只打算用 y 分支,也会触发 ZeroDivisionError
  • np.where 不跳过计算,只跳过赋值
  • 真正想“惰性求值”,得用布尔索引分步写:result = np.copy(y); result[condition] = x[condition]

替换 NaN 或无穷大时,用 isnan / isinf 别直接写 == np.nan

np.nan == np.nan 永远是 False,所以 arr == np.nan 全是 False,用它做 condition 会完全失效。

阅读全文

本文共计743个文字,预计阅读时间需要3分钟。

如何使用NumPy的np.where()函数实现条件替换操作?

pythonnp.where(condition, x, y)

看起来像是Python的三元操作符 `x if cond else y`,但它是一种向量化操作。不逐个元素进行条件判断,而是先计算所有 `x` 和 `y` 的值,然后根据 `condition` 的布尔值进行选择。这意味着,如果 `condition` 为 `False`,则输出所有 `x` 的值,否则输出所有 `y` 的值。

  • 如果 x1 / arr,而 arr 含 0,哪怕只打算用 y 分支,也会触发 ZeroDivisionError
  • np.where 不跳过计算,只跳过赋值
  • 真正想“惰性求值”,得用布尔索引分步写:result = np.copy(y); result[condition] = x[condition]

替换 NaN 或无穷大时,用 isnan / isinf 别直接写 == np.nan

np.nan == np.nan 永远是 False,所以 arr == np.nan 全是 False,用它做 condition 会完全失效。

阅读全文