【问题标题】:How to update np.array conditionally?如何有条件地更新 np.array?
【发布时间】:2018-06-27 22:55:25
【问题描述】:

我有两个 numpy 数组:

Out[23]: a = np.array([3, 7, 8, 9, 2], dtype=float)
Out[24]: b = np.array([5, 6, 7, 10, 3], dtype=float)

我需要比较 a 和 b,并更新数组 b,使其元素包含 较高的值或 np.nan

示例代码:

for i in range(len(b)):
    b[i] = b[i] if b[i] > a[i] else np.nan

结果:

b
Out[33]: array([  5.,  nan,  nan,  10.,   3.])

有没有办法在不使用 for 循环的情况下做到这一点?

提前致谢。

【问题讨论】:

    标签: python arrays pandas numpy conditional


    【解决方案1】:

    您可以使用np.where

    >>> np.where(b > a, b, np.nan)
    array([  5.,  nan,  nan,  10.,   3.])
    

    【讨论】:

    • 非常感谢!我希望我对 Numpy API 有更好的了解。 ;-)
    【解决方案2】:

    使用np.where 评估整个向量的条件

    b = np.where(b>a,b,np.nan)
    

    np.where 接受(condition, value_when_true, value_when_false)

    【讨论】:

      【解决方案3】:
      b[b <= a] = np.nan
      

      演示:

      >> import numpy as np
      >> a = np.array([3, 7, 8, 9, 2], dtype=float)
      >> b = np.array([5, 6, 7, 10, 3], dtype=float)
      >> b[b <= a] = np.nan
      >> b
      array([  5.,  nan,  nan,  10.,   3.])
      

      【讨论】:

        猜你喜欢
        • 2021-06-14
        • 2019-07-10
        • 2013-08-14
        • 2019-10-21
        • 2018-02-15
        • 2018-09-26
        • 1970-01-01
        • 2019-09-14
        • 2019-11-11
        相关资源
        最近更新 更多