如何使用NumPy的np.where()函数实现条件替换操作?
- 内容介绍
- 相关推荐
本文共计743个文字,预计阅读时间需要3分钟。
pythonnp.where(condition, x, y)
看起来像是Python的三元操作符 `x if cond else y`,但它是一种向量化操作。不逐个元素进行条件判断,而是先计算所有 `x` 和 `y` 的值,然后根据 `condition` 的布尔值进行选择。这意味着,如果 `condition` 为 `False`,则输出所有 `x` 的值,否则输出所有 `y` 的值。
- 如果
x是1 / 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分钟。
pythonnp.where(condition, x, y)
看起来像是Python的三元操作符 `x if cond else y`,但它是一种向量化操作。不逐个元素进行条件判断,而是先计算所有 `x` 和 `y` 的值,然后根据 `condition` 的布尔值进行选择。这意味着,如果 `condition` 为 `False`,则输出所有 `x` 的值,否则输出所有 `y` 的值。
- 如果
x是1 / 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 会完全失效。

